CXPACKET等待类型分析
背景
客户反馈今天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语句分析并行的原因并进行优化,避免并行。
CXPACKET等待类型分析的更多相关文章
- SQL SERVER ->> CXPacket等待类型
最近做了一个项目,把整个数据仓库平台下所有的表和索引都改成页级别的数据压缩.昨天发现测试环境下的某个workload跑得比平时慢.最后我们定位了到这个workload做的事情中可能造成性能下降的地方, ...
- SQLSERVER CXPACKET 等待
--SQLSERVER CXPACKET 等待 2013-6-11 2 --联机丛书: 3 --当尝试同步查询处理器交换迭代器时出现.如果针对该等待类型的争用成为问题时,可以考虑降低并行度 4 5 6 ...
- 资源等待类型sys.dm_os_wait_stats
动态管理视图 sys.dm_os_wait_stats 返回执行的线程所遇到的所有等待的相关信息.可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题. 列名 数据类型 说 ...
- DBA_Oracle Event等待事件分析(概念)
2014-12-18 Created By BaoXinjian
- [转载]sql server 等待类型
下表列出各任务所遇到的等待类型. 等待类型 说明 ASYNC_DISKPOOL_LOCK 当尝试同步并行的线程(执行创建或初始化文件等任务)时出现. ASYNC_IO_COMPLETION 当某任务正 ...
- sql server 各种等待类型-转
等待的类型 资源等待 当某个工作线程请求访问某个不可用的资源(因为该资源正在由其他某个工作线程使用,或者该资源尚不可用)时,便会发生资源等待.资源等待的示例包括锁等待.闩锁等待.网络等待以及磁盘 I/ ...
- Wait--常见的等待类型
--==================================================================================--SLEEP_BPOOL_FL ...
- CXPACKET等待事件
今天收到数据库预警,发现连接数较多.于是立马登录查看机器的基本情况: select * from sys.sysprocesses 查看了一下连接数,发现有两个进程都处于CXPACKET状态,而且看得 ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...
- ElasticSearch 线程池类型分析之SizeBlockingQueue
ElasticSearch 线程池类型分析之SizeBlockingQueue 尽管前面写好几篇ES线程池分析的文章(见文末参考链接),但都不太满意.但从ES的线程池中了解到了不少JAVA线程池的使用 ...
随机推荐
- C# 理解委托与事件(烧水壶例子)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- logstash 与ElasticSearch:从CSV文件到搜索宝库的导入指南
logstash 与ElasticSearch:从CSV文件到搜索宝库的导入指南 使用 logstash 导入数据到 ES 时,由三个步骤组成:input.filter.output.整个导入过程可视 ...
- paddle DeBug 三步定位PARL飞桨报错原因,快速解决程序问题
相关文章: [一]-环境配置+python入门教学 [二]-Parl基础命令 [三]-Notebook.&pdb.ipdb 调试 [四]-强化学习入门简介 [五]-Sarsa&Qlea ...
- 8.3 Windows驱动开发:内核遍历文件或目录
在笔者前一篇文章<内核文件读写系列函数>简单的介绍了内核中如何对文件进行基本的读写操作,本章我们将实现内核下遍历文件或目录这一功能,该功能的实现需要依赖于ZwQueryDirectoryF ...
- 4.9 x64dbg 内存处理与差异对比
LyScript 插件中针对内存读写函数的封装功能并不多,只提供了最基本的内存读取和内存写入系列函数的封装,本章将继续对API接口进行封装,实现一些在软件逆向分析中非常实用的功能,例如ShellCod ...
- LeetCode刷题日记 2020/03/25
力扣刷题继续! 题目:计算三维形体表面积 题干 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i ...
- Vulkan学习苦旅06:创建渲染通道(VkRenderPass)
对于一个复杂的图形应用程序,需要多个过程的配合,以生成图像的各个部分.通常,各个过程间存在着依赖关系,例如某个过程生成的图像(输出)被另一个过程使用(作为此过程的输入).在Vulkan中,每个过程被称 ...
- .NET Core开发实战(第35课:MediatR:让领域事件处理更加优雅)--学习笔记
35 | MediatR:让领域事件处理更加优雅 核心对象 IMediator INotification INotificationHandler 这两个与之前的 Request 的行为是不一样的, ...
- .NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(下)
接下来介绍使用代理方法的方式,也就是说把 ErrorController 整段逻辑直接定义在注册的地方,使用一个匿名委托来处理,这里的逻辑与之前的逻辑是相同的 app.UseExceptionHand ...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第8章)
第 8 章 服务发现 面对大量服务,为了简化配置和管理工作,我们需要了解"服务发现"概念 回顾云原生特性 配置外置 将 URL 和登录凭证移到配置文件和 C# 代码之外,放到环境变 ...