背景
客户反馈今天8点钟开始进入业务高峰期后,数据库的CPU利用率非常高,基本达到了100%,前端应用也非常慢。怀疑是昨晚业务系统升级导致,请我们紧急协助分析。
现象
登录到SQL专家云,进入相关时间的活动会话的原始数据页面,看到很多会话的等待类型是CXPACKET,并且等待时间达到了几十秒。
分析
首先简单介绍一下CXPACKET等待类型:当SQL Server进行某些复杂的运算(例如大表或索引的扫描)时,为了加快执行速度,采用多线程并行的方式进行,每个线程处理一部分数据,最后再进行结果合并,在等待一个或多个线程返回结果时就会产生CXPACKET等待类型,类似的等待类型还有CXCONSUMER。对于复杂的SQL语句,并行的方式可以大幅的降低执行时间,但是对于简单的、高并发的SQL语句,CXPACKET等待类型就会产生严重的性能问题。
如此简单的SQL语句还要使用并行,第一反应就是缺少合适的索引,通过SQL专家云的智能分析,在执行计划中发现行数为1900多万的表上有缺失索引,而且影响度非常高。
解决
表上创建好索引后,该语句的执行时间降低到几百毫秒,CXPACKET等待类型大幅减少,CPU利用率下降到10%以下。
经验
配置最大并行度(Max Degree of Parallelism)参数,该参数是实例级别的(2016以后版本中可以对单独数据库设置) 。默认是0,对于一个SQL请求,可以使用全部的CPU核数进行并行调度,对于单个SQL请求来说是最好的,但是数据库是有并发的,就会导致其他的请求没有CPU资源,所以要在单个语句的执行时间和整体的并发之间取得一个平衡,对于OLTP系统,建议设置成4或者8,对于OLAP系统,可根据实际的并发请求数适当放大。 创建合适的索引, 一个很简单的语句产生CXPACKET等待,绝大多数原因是没有合适的索引,创建合适索引后,语句会有几倍到几十倍的提升。 找到高并发的SQL语句分析并行的原因并进行优化,避免并行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
MySQL数据库当前和历史事务分析
听见风的声音
420次阅读
2025-04-01 08:47:17
云和恩墨钟浪峰:安全生产系列之SQL优化安全操作
墨天轮编辑部
238次阅读
2025-03-31 11:08:20
首批!中国信通院正式启动“可信数据库”键值数据库性能专项测试!
数据库应用创新实验室
138次阅读
2025-04-07 09:46:48
拒绝玄学调优!科学分析精准狙击慢SQL
YashanDB
121次阅读
2025-03-28 15:02:10
记一次Sqlserver数据库性能分析
Digital Observer
108次阅读
2025-04-07 10:15:27
案例-索引对于并发Insert性能优化测试
布衣
92次阅读
2025-04-09 22:47:23
Oracle数据库常用脚本(八)
hongg
57次阅读
2025-04-02 09:09:23
迈向云原生:理想汽车 OLAP 引擎变革之路
镜舟科技
51次阅读
2025-04-01 20:22:16
凌晨2点的数据库崩溃:SQL Server DBA的"性能炼狱"逃生指南
DBdoctor
43次阅读
2025-03-27 10:00:42
PolarDB PostgreSQL版索引预读原理介绍
PolarDB
43次阅读
2025-03-27 10:00:42