首页 > 代码库 > sql server是否超线程?
sql server是否超线程?
使用sys.dm_sys_info 这个视图的时候经常对hyperthread_ratio这个列感觉迷惑。这个列的含义到底是什么?
翻译的外国大神的一篇文章, http://sqlblog.com/blogs/kalen_delaney/archive/2007/12/08/hyperthreaded-or-not.aspx
在我的课堂上或者每次我做性能顾问的时候,我经常会遇到一个问题“我怎么确定我们的SQL SERVER是否是超线程的”?
当我发现DMV--sys.dm_sys_info有一个列叫做hyperthread_ratio(超线程比)的时候,我感觉很高兴极了。不久后,我读到我最爱的一个SQL SERVER
博主Buck Woody 的一篇博文。他指出下面的查询告诉了我们CPU核心的数量,而并不是告诉你是否开启了超线程。
SELECT cpu_count/hyperthread_ratio AS sockets
FROM sys.dm_os_sys_info
虽然Buck 说这条语句告诉了我们核的数量,但这并不正确。因为一个插槽可以包含一个多核的CPU。一个拥有单插槽双核CPU 并且未做超线程的cpu_count 是2,hyperthread_ratio 是2 ;同时单插槽单核心并且超线程的计算机 hyperthread_ratio 同样也是2。在2种情况下,cpu_count/hyperthread_ratio 都是1--插槽的数量。如果我们有一台一个插槽,双核CPU,并且超线程的计算机,CPU_COUNT会变成4.hyperthread_ratio 同样是4,使用这个比率同样是1,总结如下:
Number of Sockets | Number of Cores | Hyperthreaded? | sys.dm_os_info. | sys.dm_os_info. | cpu_count / hyperthread_ratio |
1 | 2 | NO | 2 | 2 | 1 |
1 | 1 | YES | 2 | 2 | 1 |
1 | 2 | YES | 4 | 4 | 1 |
所以即使Buck说这个公式能够告诉我们核心的数量,但是这个查询本身告诉我们,结果是“插槽数”。cpu_count/hyperthread_ratio会得到插槽数,而不是核心数。并且没有办法区分双核和超线程.
sql server是否超线程?