CXPACKET等待事件
今天收到数据库预警,发现连接数较多。于是立马登录查看机器的基本情况:
select * from sys.sysprocesses
查看了一下连接数,发现有两个进程都处于CXPACKET状态,而且看得到一条查询有N个并发,这里没有保留当时的记录,所以就不贴图片了。
我们看下为什么会出现这种CXPACKET等待呢?CXPACKET又是什么呢?
CXPACKET:当尝试同步查询处理器交换迭代器时出现。如果针对该等待类型的争用成为问题时,可以考虑降低并行度。
也就是说当一个SQL并发执行的时候,必须等待所有的进程执行完毕,才能一起返回结果,如果有一个进程没有执行完毕,执行完毕的只能是出于CXPACKET的等待状态。一条语句能不能够并行执行主要是由以下两个参数控制的:
cost threshold for parallelism和MAXDOP
cost threshold for parallelism 选项指定 Microsoft SQL Server 创建和运行并行查询计划的阈值。仅当运行同一查询的串行计划的估计开销高于在 cost threshold for parallelism 中设置的值时,SQL Server 才创建和运行该查询的并行计划。开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。只能在对称多处理器系统上设置 cost threshold for parallelism。默认值为5S。
并行计划对需时较长的查询通常更加有益;其性能优势将抵消初始化、同步和终止并行计划所需的额外时间开销。短时间和长时间查询混合运行时,可以灵活使用 cost threshold for parallelism 选项。短时间查询使用串行计划运行,而长时间查询使用并行计划运行。cost threshold for parallelism 的值确定哪些查询是短时间查询,因而应该使用串行计划运行。
在某些情况下,即使查询的开销计划小于当前 cost threshold for parallelism 的值,也有可能选择并行计划。出现这种情况,是因为使用并行还是串行计划是根据完成完全优化之前所提供的开销估计确定的。
这个参数我们可以手动修改,立即生效(修改默认值为30秒):
sp_configure 'show advanced options', 1;
GO
reconfigure;
GO
sp_configure 'cost threshold for parallelism', 30;
GO
reconfigure;
GO
MAXDOP是sqlserver的最大并行度,默认为0表示不限制。我们可以手动修改(设置为8):
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'max degree of parallelism', 8;
GO
RECONFIGURE WITH OVERRIDE;
GO
sqlserver出现大量CXPACKET等待,一般情况下说明我们的这两个设置是有部分问题的。当然这也要看我们的业务需求。OLAP和OLTP的设置是不同的。
根据不同的系统我们也有不同的建议,参考了一些外文资料:
OLAP:长事物,处理较慢,建议不修改默认值,直接为0,cost threshold for parallelism的值也可以设置稍微大一些。
OLTP:小事物,处理快的我们可以设置MAXDOP为1,cost threshold for parallelism值可以设置较小,建议默认值不修改。
还有一种设置就是设置MAXDOP=2,这样可以避免并行度过高,又可以使小事物能够直接串行执行。
另外我们也可以直接指定SQL的并行度:option(maxdop 1)
select * from table_name option(maxdop 1)
当然这个也是要受制于MAXDOP的设置值。
由于我的这个是OLAP的系统,所以认为0设置还是比较合理的,基本上大多数都是长事物,并没有做修改。杀掉了一个长事物,就OK了,不过这个学习过程还是要分享一下给大家。
CXPACKET等待事件的更多相关文章
- [翻译]SQL Server等待事件—THREADPOOL
前言: 本文是对SQLSkills上一篇关于SQL Server中THREADPOOL等待的博客的翻译,本文也不是完全翻译,有些地方适当加入了自己的一些认知.如有翻译不对或不好的地方,敬请指出,大 ...
- SQL Server等待事件新解
资源等待类型 并行:CXPACKET Buffer:PAGEIOLATCH_X 非Buffer:LATCH_X I/O:ASYNC_IO_COMPITION:IO_COMPITION CPU:SOS_ ...
- Oracle Tuning 基础概述01 - Oracle 常见等待事件
对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...
- SQL SERVER中的OLEDB等待事件
OLEDB等待事件介绍 OLEDB等待类型是SQL SERVER 数据库中最常见的几种等待类型之一.它意味着某个会话(SPID)通过SQL Server Native Client OLEDB Pro ...
- ORACLE等待事件:enq: TX - row lock contention
enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...
- ORACLE等待事件: log file parallel write
log file parallel write概念介绍 log file parallel write 事件是LGWR进程专属的等待事件,发生在LGWR将日志缓冲区(log_buffer)中的重做日志 ...
- 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...
- DB SQL Monitor 阻塞及等待事件监控工具
SQL Monitor Designed By zhaoguan wang 说明------------------------------------------------------------ ...
- truncate表hang住(等待时间较长),出现enq:RO fast object reuse等待事件
有一个应用truncate表等待了一晚上,一个定时任务,跑了几年了,今天早上来发现昨晚没有执行完成,hang住了,查询发现等待事件 fast object reuse. 10.2.0.4的库 Bug ...
随机推荐
- tess4j 注意事项
依赖: <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4 ...
- 2016424王启元 Exp5 msf基础应用
成功实现的有: 一个主动攻击实践,ms08_067 一个针对浏览器的攻击,ms11_050 一个针对客户端的攻击,Adobe(在实现这一步骤的时候有点小瑕疵,就是Adobe的版本问题换了三四个才成功) ...
- 那些H5用到的技术(3)——屏幕场景滑动
前言Swiper.js一些需要我们手动设置的参数排版元素需要设置position:absolute绝对元素定位swiperAnimate方法的使用动画播放完成之后的监听上滑提示屏幕适配的问题Anima ...
- 与native交互时会出现的问题
1.jsbridge: 可以用jsbridge与native交互,这属于第三方库,前端后端都需要加jsbridge 2.可以直接调用原生的方法,ios: window.webkit.message ...
- (转)bash条件判断之if语句
http://blog.51cto.com/64314491/1629175---------bash条件判断之if语句(一) http://blog.51cto.com/64314491/16292 ...
- npm全局安装和局部文件安装区别
全局安装往往是安装一个工具,他不是安装在一个文件夹下,而是安装在某个全局环境下,如目前我的安装路径是: C:\Users\cvter\AppData\Roaming\npm 在这里,我们可以看到所有全 ...
- 高效的JS数组操作
1.向数组的末尾添加元素 var arr=[1,2,3]; arr[arr.length]=1; 2.向数组的头部添加元素 var arr=[1,2,3]; [0].concat(arr); 3.向数 ...
- MySQL表级约束和列级约束
对一个数据列建立的约束,称为列级约束 对多个数据列建立的约束,称为表级约束 列级约束即可以在列定义时生命,也可以在列定义后声明. 表级约束只能在列定义后声明. NOT NULL和DEFAULT只存在列 ...
- Python数据类型(元组)
文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 元组 Python的元组与列表类似 ...
- POI基本操作
1.读取excel文件 InputStream is = new FileInputStream(filesrc); POIFSFileSystem fs = new POIFSFileSystem( ...