증상(Symptoms)
OS에서는 80개의 프로세서를 인지하지만, SQL Server에서는 40개의 논리 프로세서만을 인지함.
시스템 환경
Windows Server 2008 R2 x64
4 NUMA nodes
Processor # : 80 (8 sockets * 10 cores)
Hyperthreading : Off
SQL Server 2005 Enterprise Edition
원인(Cause)
SQL Server 2008까지는 Windows Server 2008 R2부터 64개를 초과하는 프로세서를 지원하기 위해서 도입된 Processor Group 개념을 인지하지 못하기 때문임.
각 Procesor Group에 프로세스를 할당할 때는 NUMA node 단위로 할당이 이루어지며, 최대 4개의 Processor Group까지 사용될 수 있음. 그룹당 최대 64개의 프로세서를 지원하므로, Windows Server 2008 R2 부터는 총 256개의 프로세서를 인지할 수 있음. 하지만, SQL Server 2005와 같이 Processor Group 개념을 인지하지 못하는 응용 프로그램에는 OS가 임의로 하나의 Processor Group만을 할당해주게 됨.
이 예에서는 총 80개의 프로세서가 존재하므로, 두 개의 Processor Group으로 각각 2개의 NUMA node가 할당되어 Processor Group당 40개의 프로세서가 존재하게 됨. 이중 임의로 하나의 Processor Group이 OS에 의해 SQL Server에 할당되므로, SQL Server에서는 40개의 논리 프로세서만을 인식하게 됨.
해결(Resolution)
SQL Server 2008 R2부터 Processor Group을 인지하므로 SQL Server를 업그레이드하는 것이 최선의 방법임.
추가 정보 (Morea Information)
1. SQL Server 2005에서 지원되는 최대 프로세서 수를 보면 "운영 체제에서 지원하는 최대 크기"라고 되어 있습니다. 이 문구에는 SQL 2005가 출시된 당시의 운영체제에서 지원하는 최대 크기"라는 숨은 의미가 있습니다. 즉, SQL Server 2005는 최대 64개의 프로세서를 지원한다고 할 수 있습니다.
SQL Server 2005 Edition에서 지원하는 프로세서의 최대 개수
2. 위 예제에 사용된 시스템 환경에서 SQL Server가 40개의 프로세서를 인지하더라도 Hyperthreading의 On/Off여부에 따라 다르게 인지하게 됩니다.
1) Hyperthreading이 켜져(ON) 있을 때, OS는 160개의 프로세스를 인식하지만 SQL Server는 40개만을 인식하게 됨. 64개를 넘는 프로세스를 담을 수 없으므로 4개의 Processor Group이 모두 사용됨.
2) Hyperthreading이 꺼져(OFF) 있을 때, OS는 80개의 프로세스를 인식하지만 SQL Server는 40개만을 인식하게 됨. Processor Group 3, 4는 사용되지 않음.
SQL Server 2005 and 2008 versions may not detect all available processors on a machine with more than 64 logical processors
HTH
한기환

20110602.SQL Server 엔지니어가 바라온 개인 정보.zip