解决一阻塞语句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 ...
随机推荐
- 铁区MES部分页面展示
激活码: 76231722-2e7554593-b750-07e2f4844531 TIP: 若您激活不成功,可能是因为您所安装的软件版本较低,请尝试以下激活码 激活码: RXWY-A25421-K5 ...
- 8-04流程控制语句BEGIN ..END
流程控制语句: 是用来控制程序流程的语句. 常用的流程控制语句的分类: 顺序结构:BEGIN...END 分支结构: IF ..ELSE 或CASE ..END 循环结构:WHILE 顺序结构 语法 ...
- CozyRSS开发记录3-标题栏再加强
CozyRSS开发记录3-标题栏再加强 1.更精炼的标题栏 接下来,我们把窗口的边框和默认的标题栏给去掉,让Cozy看起来更像一个平板应用. 在主窗口的属性里,修改下列两个属性: 效果一目了然: 2. ...
- CozyRSS开发记录2-酷炫的皮肤库
CozyRSS开发记录2-酷炫的皮肤库 1.MaterialDesignToolkit 最开始微软推出Metro设计风格的时候,有人喜欢有人喷.紧接着,Ios也开始做扁平化的UI,这时候,扁平化已成为 ...
- RESTful API 设计指南 (转)
RESTful API 设计指南 2016-02-23 ImportNew (点击上方公号,可快速关注) 作者:阮一峰 链接:http://www.ruanyifeng.com/blog/2014/0 ...
- SVG实现导航动画
效果图动画后 html <!DOCTYPE html> <html > <head> <meta charset="UTF-8"> ...
- YUV RGB播放器 打开, 显示RGB数据
可以查看RGB像素数据 可以通过菜单栏打开像素数据文件,也可以通过拖拽方式打开文件.如果文件名称中包含了“{w}x{h}”这样的字符串(例如“test_320x420.yuv”),系统会自动解析为该像 ...
- python安装库
首先确保安装了pip,并且pip也加入了系统path路径: pip下载:https://pypi.python.org/pypi/pip#downloads 下载Python对应的包:(http:// ...
- 浏览器-03 WebKit 渲染1
WebKit是一个渲染引擎,而不是一个浏览器; DOM是对HTML或者XML等文档的一种结构化表示方法,通过这种方式,用户可以通过提供标准的接口来访问页面中的任何元素的相关属性,并可对DOM进行相应的 ...
- 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划
[BZOJ1672][Usaco2005 Dec]Cleaning Shifts Description Farmer John's cows, pampered since birth, have ...