今天配合客户做压力测试,我对数据库进行跟踪,存在一些疑问,请达人指点。
一些简单的查询或存储过程(单独执行时间少于1S),被SQL SERVER 设定为并发,在进程列表中的表现就是一个查询的执行开了10+线程,第一个等待状态为CXPACKET,其余都是suspended。第一个线程block其余的线程。
cost threshold for parallelism 是默认设定 5S.
理论上应该是the estimated cost 高于5S才应该安排并发吧?莫非SQL SERVER 开销评估出现误差?
------解决方案--------------------
我是来学习的
------解决方案--------------------
我是进来蹭分的
------解决方案--------------------
------解决方案--------------------
这个只能学习
------解决方案--------------------
.
------解决方案--------------------
------解决方案--------------------
估计的执行计划在5S内 是作为串行的
------解决方案--------------------
可以看下MSDN
------解决方案--------------------
联机文档:
在某些情况下,即使查询的开销计划小于当前 cost threshold for parallelism 的值,也有可能选择并行计划。出现这种情况,是因为使用并行还是串行计划是根据完成完全优化之前所提供的开销估计确定的。
可以配合max degree of parallelism 选项.这样能最大限制的控制并行导致cpu不可用而造成的短查询的等待。如:
- SQL code
sp_configure 'show advanced options', 1;GORECONFIGURE WITH OVERRIDE;GOsp_configure 'max degree of parallelism', 4;--假如是8个(核)cpuGORECONFIGURE WITH OVERRIDE;GOsp_configure 'show advanced options', 1;GORECONFIGURE WITH OVERRIDE;GOsp_configure 'cost threshold for parallelism', 10;--将此时间增加GORECONFIGURE WITH OVERRIDE;GO
------解决方案--------------------
学习美美
------解决方案--------------------
不过,造成cxpaket等待,大都是的确有耗时的sql执行,还是需要确定一下是否有这样的报表名job ?
如果有,也可以单独指定option(maxdop 1)来限制.
------解决方案--------------------
学习
------解决方案--------------------
学习.
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------