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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1023|回复: 0
打印 上一主题 下一主题

sql server 资源等待之 CXPACKET

[复制链接]
跳转到指定楼层
楼主
发表于 2022-6-29 15:36:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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不是严重问题,但是可能是缺少索引或统计信息过时的症状。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-26 10:37 , Processed in 0.084876 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表