日期:2014-05-18  浏览次数:20609 次

关于 CXPACKET
今天配合客户做压力测试,我对数据库进行跟踪,存在一些疑问,请达人指点。

一些简单的查询或存储过程(单独执行时间少于1S),被SQL SERVER 设定为并发,在进程列表中的表现就是一个查询的执行开了10+线程,第一个等待状态为CXPACKET,其余都是suspended。第一个线程block其余的线程。

cost threshold for parallelism 是默认设定 5S.

理论上应该是the estimated cost 高于5S才应该安排并发吧?莫非SQL SERVER 开销评估出现误差?

------解决方案--------------------
我是来学习的
------解决方案--------------------
我是进来蹭分的
------解决方案--------------------
探讨
引用:
我是来学习的


探讨一下哈,兄台。


数据库活动进程中出现大批量的suspended线程和blocking,让我胆战心惊啊,不过还好都没有形成死锁。

------解决方案--------------------
这个只能学习
------解决方案--------------------
.
------解决方案--------------------

------解决方案--------------------
估计的执行计划在5S内 是作为串行的
------解决方案--------------------
可以看下MSDN
------解决方案--------------------
联机文档:
在某些情况下,即使查询的开销计划小于当前 cost threshold for parallelism 的值,也有可能选择并行计划。出现这种情况,是因为使用并行还是串行计划是根据完成完全优化之前所提供的开销估计确定的。

可以配合max degree of parallelism 选项.这样能最大限制的控制并行导致cpu不可用而造成的短查询的等待。如:
SQL code

sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism', 4;--假如是8个(核)cpu
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'cost threshold for parallelism', 10;--将此时间增加
GO
RECONFIGURE WITH OVERRIDE;
GO

------解决方案--------------------
学习美美
------解决方案--------------------
不过,造成cxpaket等待,大都是的确有耗时的sql执行,还是需要确定一下是否有这样的报表名job ?
如果有,也可以单独指定option(maxdop 1)来限制.
------解决方案--------------------
学习

------解决方案--------------------
学习.
------解决方案--------------------
探讨
今天配合客户做压力测试,我对数据库进行跟踪,存在一些疑问,请达人指点。

 一些简单的查询或存储过程(单独执行时间少于1S),被SQL SERVER  设定为并发,在进程列表中的表现就是一个查询的执行开了10+线程,第一个等待状态为CXPACKET,其余都是suspended。第一个线程block其余的线程。

 cost threshold for parallelism 是默认设定 5S.

 理论上应该是the estimated cost 高于5S才应该安排并发吧?莫非SQL SERVER 开销评估出现误差?

------解决方案--------------------
探讨
引用:
不过,造成cxpaket等待,大都是的确有耗时的sql执行,还是需要确定一下是否有这样的报表名job ?
如果有,也可以单独指定option(maxdop 1)来限制.


是Web压力测试是发生的事情,看来我还要在排查一下跟踪数据中CPU开销较大的查询了,不过CPU并行度设的低了,也会影响其他真正需要并行的查询,这个貌似不太好判断啊。

------解决方案--------------------
探讨
引用:
引用:
今天配合客户做压力测试,我对数据库进行跟踪,存在一些疑问,请达人指点。

一些简单的查询或存储过程(单独执行时间少于1S),被SQL SERVER  设定为并发,在进程列表中的表现就是一个查询的执行开了10+线程,第一个等待状态为CXPACKET,其余都是suspended。第一个线程block其余的线程。

cost threshold for parallelism 是默认设定 5S.

理论上应该是the estimated cost 高于5S才应该安排并发吧?莫非SQL SERVER 开销评估出现误差?


cost 的单位不是Sec啦,有固定的计算公式. 单独执行小於1s的SQL,其cost不一定就小於5.




联机帮助中说单位是秒啊?

使用 cost threshold for parallelism 选项指定 Microsoft SQL Server 创建和运行并行查询计划的阈值。仅当运行同一查询的串行计划的估计开销高于在 cost threshold for parallelism 中设置的值时,SQL Server 才创建和运行该查询的并行计划。开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。只能在对称多处理器系统上设置 cost threshold for parallelism。