解决一阻塞语句CPU直降15%
原本只是部署作业获取数据库中阻塞语句,中午测试汇集阻塞数据,发现某一服务器写入386行,而其他服务器只写入几行。
登录对应服务器查看详细信息,发现有四个时间点分别写入100来行记录
对于第一行:会话183被会话221阻塞,阻塞时长1887ms,会话221持有18:1:4311755上的U锁,会话183等待18:1:4311755上的U锁。
查看BlockedBatch/BlockingBatch列,此处的阻塞与被阻塞对应的存储过程是相同的,只是传递的参数不同。存储过程定义如下
CREATE PROCEDURE [dbo].[*LoadUserPersonalMsg]
@UserID INT
AS
BEGIN
SET NOCOUNT ON;
SELECT ID, UserID, MsgType, MsgContent into #temp
FROM DBname.dbo.UserPersonalMsg with(nolock)
WHERE UserID = @UserID and getDate() > BeginTime and getDate() < EndTime delete from DBname.dbo.UserPersonalMsg where ID in (select ID from #temp)
END
BlockedStmt/BlockingStmt(未截图)显示阻塞发生在delete from DBname.dbo.UserPersonalMsg where ID in (select ID from #temp)上。
列BlockingHoldResource:pagelock fileid=1 pageid=4311755 dbid=18 id=lock1d73106c80 mode=U associatedObjectId=72057594060603392,查看页上的信息

阻塞语句已确定,持有/申请的资源也明确。分析语句,为什么会在那么多页上加U锁。查看UserPersonalMsg对象上的索引,只在Userid上有聚集索引,表的记录数16W,唯一Userid记录数15W+,大部分的Userid只有一条数据,极少数有两条。也就是每次delete的量只有1~2条,但删除的where条件使用的是自增列ID,导致聚集索引扫描。并且此存储过程执行比较频繁(约10次/秒)。之前有对此服务器优化过,当时集中在CPU>40且执行频繁的语句|过程。过滤之前的跟踪文件,只获取到13条此存储过程的语句,完美地错过了这个语句~
鉴于每个Userid返回的记录数很少,直接在ID上创建主键(表已存在聚集索引,对应会创建非聚集索引)。查看CPU使用情况
2016-12-08 12:52分界点,从20%直接降到6%!
最开始获取的阻塞语句,DatabaseName有异常,当时是取sys.dm_exec_requests中的database_id,结果发现它和BlockingHoldResource中的dbid不一致,参考sys.dm_os_waiting_tasks 引发的疑问(上),修改为dm_tran_locks中的resource_database_id,测试把主键删除,查看等待,顺便说下此时CPU立马蹭到20%
很简单的一个问题,关键是捕获并识别异常,优化是一个不断迭代的过程。
解决一阻塞语句CPU直降15%的更多相关文章
- 头显HTC Vive北美直降100美元,中国区降价活动今日公布
如果你现在想要购买一台VR头显,591ARVR资讯网www.591arvr.com的小编提醒大家可以等一等,在即将到来的年末促销中各种VR设备都将迎来大力度降价.目前北美市场的HTC Vive已经直降 ...
- Verilog HDL中阻塞语句和非阻塞语句的区别
在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和非阻塞赋值语句(“<=”).正确地使用这两种赋值语句对于Verilog的设计和仿真非常重要. Verilog语言中讲的阻塞赋值与非 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- 解决session阻塞的问题
简介 对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题. 最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解 ...
- Verilog的非阻塞语句放到顺序块中,综合出来怎样的逻辑电路?
情境: FPGA里面计数器需要复位(计数值置零),与计数器状态有关的行为是状态机控制的,即状态机为CLEAR_TIMER状态时,计数器才完成清零动作. 清零有两个条件:(1)计数器值溢出(达到OVF门 ...
- 解决Antimalware Service Executable CPU占用高听语音
windows8/8.1,WIN10自带的安全软件Windows defender还不错,基本可以不用装其他杀毒软件了. 但是其进程Antimalware Service Executable 出现C ...
- 查询SQL阻塞语句
SELECT SPID=p.spid, DBName = convert(CHAR(),d.name), ProgramName = program_name, LoginName = convert ...
- 快速排查SQL服务器阻塞语句
SELECT*FROM sys.sysprocesses and blocked> --可以查看阻塞 SELECT SPID=p.spid, DBName =convert(CHAR(),d.n ...
- 解决tensorflow的"Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA Using TensorFlow backend."警告问题
问题描述 程序开始运行的时候报出警告:I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructio ...
随机推荐
- MyBatis学习(四)MyBatis和Spring整合
MyBatis和Spring整合 思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao. 使用spring和mybatis整合开发mapper ...
- 几种服务器端IO模型的简单介绍及实现
一些概念: 同步和异步 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己的事情,而 ...
- windows phone 摄像头得到图片是旋转90°
我上个随笔讲到,windows phone 拍出来的photo如果直接使用是反转了90°的. 研究了很久..终于发现问题.其实..这是使用习惯问题... CameraCaptureUI 得到的phot ...
- UWP x:bind
x:bind 作为win10 新特性,它好在哪?为什么要用它. 最近做UWP,对代码进行重构,对它有了一些了解. 先说优点: 1.性能高,内存小(相比传统的binding) 没图没真相,我先上2张图. ...
- JAVA基础中的注意点(二)
1.数组 a.特点:同种数据类型:数组类型一旦确定就不能改变. 连续空间存放:数据空间是连续的. 空间长度:数组有自己的长度,初始化的时候需要定义. 数组的下标:从0开始,第一个数组元素下标为0,最后 ...
- phonegap之android原生日历调用
android日历调用首先第一步我们要添加权限 <uses-permission android:name="android.permission.READ_CALENDAR" ...
- 在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。
1.说明:在WPF中,文件下载时需要显示下载进度,由于系统自带的条型进度条比较占用空间,改用圆形的进度条,需要在DrawingVisual上呈现. 运行的效果如图: private Point Get ...
- Linux UBI子系统设计初探
问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...
- MongoDB使用小结:一些常用操作分享
本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...
- bigint数据类型
尽管int依然是SQL Server 2000中最主要的整数数据类型,但是SQL Server 2000还是新增加了整数数据类型bigint,它应用于整数超过int数据范围的场合. int数据类型所表 ...