CXPACKET等待类型分析
1.SQL SERVER日常运维巡检系列之-日志2.关于SQL Server镜像的一个小误区3.一切从“简”,解放IT运维人员4.CPU问题定位与解决5.数据库优化案例——————某市中心医院HIS系统6.系统隐形杀手——阻塞与等待7.SQL Server常见问题介绍及快速解决建议8.tempdb日志文件暴增分析9.数据库服务器CPU不能全部利用原因分析10.如何快速定位TempDB产生问题11.索引的重要性12.SQL语句的优化建议13.通过分析等待类型解决系统产生问题14.磁盘问题定位与解决15.内存问题定位与解决16.写给数据库运维的兄弟17.为什么带NOLOCK的查询语句还会造成阻塞18.链接服务器查询导致的阻塞
19.CXPACKET等待类型分析
20.为什么sleeping的会话会造成阻塞(2)21.为什么sleeping的会话会造成阻塞22.为SQL Server配置连接加密23.SQL SERVER——高可用技术概述24.数据库服务器CPU不能全部利用原因分析25.管理工具造成的阻塞26.自动增长配置不合理导致的性能抖动27.Profiler导致的严重性能问题28.CPU持续100%分析并解决分析29.tempdb大量闩锁等待问题分析30.探究SQL SERVER 更改跟踪31.tempdb数据文件暴增分析32.SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测33.Moebius兼容AlwaysOn34.Moebius for SQL Server35.SQL SERVER日常运维巡检系列——数据库备份36.SQL SERVER日常运维巡检系列——结构设计37.Moebius for SQL Server38.SQL SERVER日常运维巡检系列之-数据库39.【能力提升】SQL Server常见问题介绍及快速解决建议40.CDC作业历史记录无法删除问题41.为Oracle链接服务器使用分布式事务42.大事务导致数据库恢复时间长43.SQL Server关于AlwaysOn的理解-读写分离的误区(一)44.链接服务器导致SQL Server停止响应45.简单配置Sql专家云46.SQL专家云回溯某时间段内的阻塞47.SQL专家云快速解决阻塞48.SQL专家云汇总低效的SQL语句49.数据库优化案例—某市中心医院HIS系统50.细说数据库协作运维51.医院核心数据库一体化建设实践52.【能力提升】SQL Server常见问题介绍及快速解决建议53.Moebius数据库多活集群54.30分钟带你熟练性能优化的那点儿事儿(案例说明)55.SQL Server底层架构技术对比56.Moebius兼容AlwaysOn57.透过等待看数据库58.数据库自动收缩造成的阻塞59.CPU持续100%分析并解决背景
客户反馈今天8点钟开始进入业务高峰期后,数据库的CPU利用率非常高,基本达到了100%,前端应用也非常慢。怀疑是昨晚业务系统升级导致,请我们紧急协助分析。
现象
登录到SQL专家云,进入相关时间的活动会话的原始数据页面,看到很多会话的等待类型是CXPACKET,并且等待时间达到了几十秒。
查看具体的SQL语句,发现都很简单。

分析
首先简单介绍一下CXPACKET等待类型:当SQL Server进行某些复杂的运算(例如大表或索引的扫描)时,为了加快执行速度,采用多线程并行的方式进行,每个线程处理一部分数据,最后再进行结果合并,在等待一个或多个线程返回结果时就会产生CXPACKET等待类型,类似的等待类型还有CXCONSUMER。对于复杂的SQL语句,并行的方式可以大幅的降低执行时间,但是对于简单的、高并发的SQL语句,CXPACKET等待类型就会产生严重的性能问题。
如此简单的SQL语句还要使用并行,第一反应就是缺少合适的索引,通过SQL专家云的智能分析,在执行计划中发现行数为1900多万的表上有缺失索引,而且影响度非常高。
解决
表上创建好索引后,该语句的执行时间降低到几百毫秒,CXPACKET等待类型大幅减少,CPU利用率下降到10%以下。
经验
如果您的数据库有大量的CXPACKET等待类型,并且CPU利用率非常高,以下的经验基本可以帮助您解决问题
- 配置最大并行度(Max Degree of Parallelism)参数,该参数是实例级别的(2016以后版本中可以对单独数据库设置) 。默认是0,对于一个SQL请求,可以使用全部的CPU核数进行并行调度,对于单个SQL请求来说是最好的,但是数据库是有并发的,就会导致其他的请求没有CPU资源,所以要在单个语句的执行时间和整体的并发之间取得一个平衡,对于OLTP系统,建议设置成4或者8,对于OLAP系统,可根据实际的并发请求数适当放大。
- 创建合适的索引, 一个很简单的语句产生CXPACKET等待,绝大多数原因是没有合适的索引,创建合适索引后,语句会有几倍到几十倍的提升。
- 找到高并发的SQL语句分析并行的原因并进行优化,避免并行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)