六、CPU优化(2)超线程

一、线程

1. 线程

  SQL Server 使用操作系统的线程来执行并发任务。在不使用纤程的情况下,SQL Server将启动线程,并由OS将线程分配给cpu,线程管理由OS内核控制,当一个线程完成退出CPU,其他线程调度占用该CPU时,将发生一个上下文切换,这个切换是在应用程序的用户模式和线程管理的内核模式之间的切换,所以需要付出一定的代价,应当尽量避免这种切换。 

 

2. 纤程

  为了减少上下文切换,引入纤程的概念,可以在SQL Server中启用纤程,纤程是线程的子模块,纤程由运行在用户模式下的代码管理,所以切换纤程比切换进程的代价少的多,因为纤程模式不需要在将用户模式和内核模式中切换,而切换线程则需要这种转换。

  SQL Server管理纤程的调度,而OS管理线程的调度;线程模式里 SQL Server为每个并发用户创建配一个线程,而纤程模式中 SQL Server为每个CPU分配一个线程,并为每个并发用户创建配一个纤程,一个线程中可以有多个纤程,纤程只在线程里切换,不用上下文切换 

 

3. 线程的分配

  SQL Server既可以为用户连接维护一个线程池,也可以维护一个纤程池(如果设置了纤程模式,则系统只维护纤程池,不在是线程池)。在连接池中,线程和纤程都看作工作纤程,并可以由max worker threads 选项来设置SQL Server可分配的线程或纤程的最大数目,一般采用默认值255 。 
  当一个语句需要SQL Server执行时: 

(1)如果线程池里用空闲的线程,SQL Server将为该语句分配一个线程。

(2)如果线程池中没有可供使用的空闲线程并且没有达到最大工作线程数量,SQL Server将为该命令创建新的工作线程。

(3)如果到了最大线程使用数量并且没有空闲的线程,则进程必须等待其他处理完成后释放一个线程。

 

 

二、超线程

1. 概念

  超线程(Hyper-Threading,简称HT)是英特尔所研发的一种技术,于2002 年发布。最早应用于Xeon处理器中,之后陆续应用在Pentium 4 中,将技术主流化。

  英特尔表示,超线程技术让Pentium 4 处理器增加5% 的裸晶面积,就可以换来15%~30% 的效能提升。但实际上,在某些程序或对单线程的程序而言,超线程反而会降低效能。除此之外,超线程技术还需要操作系统的配合,Windows  XP 和Windows 2003 就已经支持超线程技术。

 

2. 原理

  采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。http://www.intel.com/content/www/us/en/architecture-and-technology/hyper-threading/hyper-threading-technology.html

  超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 HT的die的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。

  虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

 

3. 与双核的区别

  双核CPU则不同,双核处理器的概念就是将两颗处理器的芯片,通过全新的封装技术,整合成为一颗处理器,在这一颗处理器中拥有两颗核心,真正地实现了多处理器协同工作。双核心处理器核心内的资源都是独立的,而且也可以交换使用资源,核心与核心之间沟通的延迟远比多个单核心处理器同时运行好。

 

三、SQL Server 建议

1. 性能问题

  “超线程”(Hyperthreading Technology)技术就是通过采用特殊的硬件指令,可以把两个逻辑内核模拟成两个物理超线程芯片,使一个处理器中的不同部分同时运行不同的代码,从而实现在单处理器上模拟双处理器的效能。其实,从实质上说,超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术。

  2005年11月,微软内部SQL Server 2005的一名开发人员斯拉瓦在网页帖子中报告了超线程的性能问题。他写道,在支持超线程技术的高端硬件上,我们的客户发现了一些有趣的现象。有些情况下,当SQL Server负荷较高时,处理器的利用率大幅度增长,但SQL Server性能却会下滑。

  斯拉瓦的一些测试也证明了这一现象。他说,在使用超线程技术后,二个逻辑处理器共享L1和L2缓存,这可能使L1和L2缓存成为数据垃圾场。据斯拉瓦等人分析,共享的缓存无法同时满足二个线程对数据的要求,从而导致了性能的大幅度下滑。

 

2. 原因分析

  对于 SQL Server 系统,DBMS 实际上处理自己的极其有效的操作系统队列和线程,因此,超线程仅在 CPU 利用率已经很高、系统上的物理 CPU 超载的情况下使用。

  当 SQL Server 在多个计划程序上对执行任务请求进行排队时,实际上操作系统必须在物理处理器上来回切换线程的上下文,以满足不断发出的请求,即使同一物理处理器上存在两个逻辑处理器也不例外。

 

3. 最佳实践

  在“性能监视”中,请检查名为 Context Switches/sec 的性能计数器。此计数器显示为了为其他等待线程执行任务必须从操作系统计划程序(而非 SQL 计划程序)中取出线程的次数。对于与其他应用程序(如 IIS)或其他供应商应用程序服务器组件共享的数据库系统,上下文切换可能更加频繁。在启用了超线程并且对 CPU 的利用率达到中高程度(80%以上)的系统上,该阈值还可更高。

  如果每个物理处理器的 Context Switches/sec 高于 5000(即,该值超过服务器中处理器数量的 5000 倍),官方强烈建议您考虑关闭系统上的超线程并重新测试性能。http://technet.microsoft.com/zh-cn/magazine/2007.10.sqlcpu.aspx

  如果 CPU 利用率和上下文切换经常同时超出各自的阈值,这就表明出现了 CPU 瓶颈。如果经常发生这种情况,并且您的系统已过时,则应该开始计划购买更多或处理速度更快的 CPU。

  在 SQL Server 上出现高 CPU 利用率时应用程序极少能有效地使用超线程。在生产系统上实施更改之前,必须在超线程启动和关闭这两种情况下针对 SQL Server 测试应用程序。

 

 

本文结语:

  原则上,SQL Server服务器不推荐启用超线程。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值