码迷,mamicode.com
首页 > 其他好文 > 详细

Schedule Performance

时间:2016-06-14 14:13:03      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:

 

 一,SQL Server 独特的调度算法:非抢占式争用CPU资源和主动Yield

1,voluntarily yield

在SQL Server Scheduler上运行的Worker都是以非抢占模式来争用CPU资源的。Worker 会一直在一个Scheduler上运行,直到运行结束,或者主动将Scheduler 让出给其他Worker为止。SQL Server定义了很多Yield的规则,约束一个Task占用Scheduler运行的时间,保证Task在合适的时间点主动Yield,不至于占用Scheduler 太多时间,使其他Task等待太久。当Task 主动Yield时,Request处于SOS_SCHEDULER_YIELD等待类型。

2,因被block而yield

如果一个Worker在运行过程中被锁或是其他资源阻塞,那么该Worker就会让出Scheduler,来让其它Worker运行,当前Worker处于阻塞状态。

二,SQL Server 消耗CPU资源的操作

1,执行计划的编译

生成执行计划是非常消耗CPU资源的,当一个语句生成执行计划之后,SQL Server将其存储在Plan Cache中,以便重用执行计划。

2,排序(Sort),聚合计算(Aggregation)和 表连接

完成这三类操作,都需要消耗CPU来完成计算,同时Disk IO也需要消耗一定的CPU。

4,多线程执行Task,

配置选项 Maximum Degree of Parallelism 和 Cost Threshold of Parallelism

在发现一个Task比较复杂时,SQL Server会生成多个Child Task,使用多个Thread并发执行该Task,从而提高整体的响应时间。Maximum Degree of Parallelism 选项控制并发度,决定一个Task在一个时间点最多可以拥有线程的数量。

Cost Threshold of Parallelism 选项决定一个Task是否并发执行。当SQL Server 编译查询语句时,总是先做单线程的执行计划,同时计算执行计划的Cost。如果发现这个执行计划的Cost 值大于Cost Threshold of Parallelism 选项设置的值,那么SQL Server 就会改用并行执行计划。如果提高Cost Threshold of Parallelism 选项的值,SQL Server 会提高做并行执行计划的标准,从而有更少的Task会并发执行,减少CPU的利用,以便留出空闲的CPU执行其他用户的Task。

由于CPU资源的有限,如果为一个Task使用全部的CPU,那么在Task并发执行期间,其他用户的Task得不到及时响应。Task的并发度和用户的并发度时互斥的,为了平衡这种并发度,一般设置Maximum Degree of Parallelism 为CPU总数的1/4,既能够以并发执行计划快速提高单个Task的执行性能,也能兼顾用户的并发度,及时响应其他用户的Request。

三,等待类型

1,SOS_SCHEDULER_YIELD

当Task 主动Yield时,Request处于SOS_SCHEDULER_YIELD等待。

2,CXPACKET

并行运行时处于的等待类型,在Request 并行运行时,某些 task 在等待其他 sibling Task的处理完成,此时,Request 处于CXPACKET等待。

Schedule Performance

标签:

原文地址:http://www.cnblogs.com/ljhdo/p/5582423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!