当前位置:数据库 > 数据库管理> 正文

sql server中cxpacket等待

时间:2017-3-2类别:数据库

sql server中cxpacket等待

sql server中cxpacket等待

一、sql server中cxpacket等待的理解

1、当为SQL查询创建一个并行操作时,会有多个线程去执行这个查询。每个查询处理不同的数据集或行集。因为某些原因,一个或多个线程滞后,而产生了CXPACKET等待状态。

2、有一个组织/协调(organizer/coordinator)线程(Thread 0),它需要等待所有线程完成并聚合数据来呈现给客户端。组织线程必须等待所有线程完成处理才能进行下一步。由于组织线程等待缓慢的线程完成处理所产生的等待,就叫CXPACKET等待。

3、CXPACKET 这个等待可以简单理解成CPU相关的等待,主要发生在并行计划中。由于并行计划需要协同多个task同时工作,那么“协同”分配等等操作的时候出现的就是这个等待。

4、如果CXPACKET 在你系统中是最为严重的等待,这时候一般的表现是你的CPU很高。

5、并不是所有的CXPACKET等待类型都是不好的事情。你也许会遇某个CXPACKET等待是完全有意义的案例,有时它也是不可避免的。

6、如果你在任何查询上禁止此种等待,那么查询也许会变慢,因为不能为它执行并行操作。

 

二、cxpacket等待的解决方法

1、适当调整并行度,操作如图

 

2、最大并行度设置的说明

(1)、如果在纯OLTP系统上,都是事务较短、特别短小且频繁的语句、查询也不长,但是通常很快速时建议将最大并行度设置成1,这样做可以确保查询永远不必使用并行方式运行,并且不会导致更多的数据库引擎开销。

(2)、如果在OLAP系统上,查询执行时间一般较长,建议设置“Maximum degree of Parallelism”(最大并行度)为0。这样大多数查询将会利用并行处理,执行时间较长的查询也会受益于多处理器而提高性能。

(3)、如果在OLAP与OLTP混合系统上,必须找到正确的平衡点,需要根据自身的系统负载情况,设置并行开销的阀值、最大并行度 两者的值。

例如:设置并行开销的阀值为25,最大并行度为2,这样的话,那些具有较高成本的查询(这里是25),将会在2颗CPU上执行并行查询。

 

3、并行开销的阀值

主要控制SQL优化器何时选用并行计划,此值设置的越小优化器越容易选择并行计划,把“并行查询阀值”设置为较高的值,这样的话,不是所有的查询都有资格使用并行,除了那些查询成本较高的查询。

 

标签:
上一篇下一篇

猜您喜欢

热门推荐