64位的Windows7和Windows Server 2008 R2为了能够在一台机器上,支持超过64个逻辑CPU, 引入了Processor Group这个概念。Processor Group会把一些逻辑CPU编成一个组,但是一个组内的逻辑CPU总数不能超过64个。Windows 会将超过64个CPU(小于128)分成两组(比例随机不固定),操作系统随机地为每个进程分配一个Processor Group,而SQL Server 2008会调用GetSystemInfo(&siSysInfo)的办法来获取逻辑CPU个数,这样便会造成到机器超过64个逻辑CPU时,SQL Server2008无法使用所有的CPU,导致性能下降。
SQL Server 2008 R2可以识别256个逻辑CPU
解决方法:
1> 取消超线程,使逻辑CPU数量低于64
2> 升级到SQL Server 2008 R2
参考资料:http://blogs.msdn.com/b/apgcdsd/archive/2011/09/05/windows-2008-r2-sql-server-2008-cpu.aspx