Affinity I/O Mask
- Version : SQL Server 2005, 2008, 2008R2, 2012
Windows Server는 멀티태스킹을 수행하기 위해 경우에 따라 여러 프로세서 사이에 프로세스 스레드를 이동하기도 한다. 운영체제 측면에서는 효율적이지만 각 프로세서 캐시에 데이터가 반복적으로 다시 로드되어 시스템 로드가 많은 경우 이로 인해 SQL Server 성능이 저하될 수 있다.
프로세서를 특정 스레드에 할당하면 프로세서가 다시 로드 되지 않으므로 이러한 조건에서도 성능을 향상 시킬 수 있다. 스레드와 프로세서간의 이러한 연결을 프로세스 선호도라고 한다. SQL Server에서는 affinity mask(CPU affinity mask라고도 함) 및 affinity I/O mask의 2가지 옵션으로 선호도를 지원한다.
이번 포스트는 CSS SQL Server Engineer 에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용을 원문을 참고하길 바란다.
Affinity I/O Mask는 SQL Server를 최적화 한다. 이것을 32비트 시스템에서 높은 I/O를 필요로 하는 대용량 데이터베이스에 적용한다.
다음 예제는 32비트 환경은 제한적인 메모리에서 실행 중인 지연 기록기 프로세스가 대용량 데이터를 스캔하고 버퍼풀을 유지 한다. 이 뜻은 SQL Server는 오래된 버퍼를 플러시하고 새로운 버퍼를 제공하여 쿼리를 지원한다. 64비트 시스템에서는 있어 I/O가 동일한 시나리오에서 더 큰 메모리를 활용할 수 있다.
I/O는 SQL Server 프로세스의 완료 처리를 필요로 한다. SQL Server는 완료를 확인해야 할 때(바이트 전송, 운영체제 오류, 올바른 페이지 번호, 페이지 헤더, 체크섬 등) CPU 자원을 사용한다.
I/O Affinity는 완료 CPU 자원의 숨겨진 스케줄러를 오프로드 하도록 설계되었다. Affinity I/O가 활성화 되면 숨겨진 스케줄러는 I/O 작업을 수행하는 특수 지연 기록기 스레드를 생성된다.
다음 그림은 affinity mask 및 I/O affinity mask 동일한 스케줄러가(부적절한 구성) 동일한 CPU 리소스에 할당되어 경쟁 한다.
다음 그림은 affinity mask 및 I/O affinity 의 적절한 설정을 보여준다.
적절한 구성의 affinity mask는 SQL Server의 I/O 작업에서 CPU의 자원을 최대한 활용한다.
[참고자료]
- affinity I/O mask 서버 구성 옵션 :
http://technet.microsoft.com/ko-kr/library/ms189629.aspx
- CPU에 스레드 할당 및 lightweight pooling 옵션 사용 : http://sqlmvp.kr/140191320792
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp