重庆思庄Oracle、Redhat认证学习论坛

标题: sql server 资源等待之 CXPACKET [打印本页]

作者: 刘泽宇    时间: 2022-6-29 15:36
标题: sql server 资源等待之 CXPACKET
CXPACKET等待类型是最常见的等待类型之一,是指:线程正在等待彼此完成并行处理。当sql server发现一条指令复杂时,会决定用多个线程并行来执行,由于某些并行线程已完成工作,在等待其它并行线程来同步,这种等待就叫CXPACKET。
在sql server 里有个任务调度SCHEDULER是跟操作系统CPU个数 默认是一 一匹配的,  我们也可能通过sp_configure来设置最大并行度,也就是Max Degree of Parallelism (MAXDOP)。

  并行处理的优势: 用多个线程来执行一个指令,当sql server发现一条指令复杂时或语句中含有大数据量要处理,此时执行计划会决定用多个线程并行来执行,从而提高整体响应时间,例如一个指令读入100w条记录, 如果用一个线程做 可能需要10秒, 如果10个线程来做 可能只需要1秒,加上线程间同步时间也不过2秒。

  并行处理的劣势:1是并行线程要等待同步。2是由于这10个线程全力以赴,就有10个对应的cpu,这样别的用户发过来的指令就会受到影响,甚至拿不到cpu来执行。所以对于并发度要求高的需要及时响应的,一般会建议手动设置每个指令的并行线程数。反之可以不设置Max Degree of Parallelism由系统默认去并行或者设少一点并行度。

有时无法避免并行性。 以数据仓库事实表为例,大多数情况下,只需要执行它就可以,不需要干预。 如果CXPACKET是由于表扫描而发生的,则很可能该表没有正确的索引或错误的查询计划。 可以通过为存储过程执行sp_recompile来创建索引或删除错误的缓存查询计划。 如果索引到位,则很可能该索引统计信息已过期,这样就可以重新更新统计信息。 如果这样做没有帮助,则可能是索引碎片化了,需要重建索引。

在经历了CXPACKET的DO之后,有一个CXPACKET的DON'Ts。 可以使用OPTIONS在一个处理器上运行查询,如下查询所示,以消除CXPACKET:

SELECT * FROM SAMPLE
WHERE NAME6 = 'A'
OPTION ( MAXDOP  1)

这样,尽管删除了CXPACKET,并且仅在一个处理器中执行查询。 但是,这将降低查询速度,因为它将在一个处理器上运行。

最后,CXPACKET不是严重问题,但是可能是缺少索引或统计信息过时的症状。





欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2