接到现场实施同事报告,项目中有个delete操作有时非常慢,用时在20多分钟,而这个delete是以主键ID作为删除条件的,照说单这个delete语句而言不存在性能问题,怀疑是在进行删除操作的时候被其他操作阻塞。如是写个存储过程进行跟踪,存储过程如下:

create proc [dbo].[sp_monitor_lock] as begin declare @spid_1 smallint, @spid_2 smallint, @spid smallint, @kpid smallint, @blocked smallint , @waittype binary(2),@waittime bigint, @lastwaittype nchar(32), @waitresource nchar(256),@login_time datetime, @last_batch datetime,@status nchar(30), @sid binary(86), @hostname nchar(128),@program_name nchar(128),@hostprocess nchar(10), @cmd nchar(16), @sql_handle binary(20), @cur_cursor CURSOR; SET @cur_cursor = CURSOR LOCAL SCROLL FOR Select spid, kpid, blocked, waittype,waittime, lastwaittype,waitresource,login_time, last_batch,status,sid, hostname,program_name,hostprocess, cmd, sql_handle from master..sysprocesses where blocked > 0; open @cur_cursor FETCH NEXT FROM @cur_cursor INTO @spid, @kpid, @blocked, @waittype,@waittime, @lastwaittype,@waitresource,@login_time, @last_batch,@status,@sid, @hostname,@program_name,@hostprocess, @cmd, @sql_handle begin begin tran insert into mon_lock_object values(@spid, @kpid, @blocked, @waittype,@waittime, @lastwaittype,@waitresource,@login_time, @last_batch,@status,@sid, @hostname,@program_name,@hostprocess, @cmd, @sql_handle) ; declare @v varchar(3000) set @v= 'dbcc inputbuffer('+ +CONVERT(VARCHAR(20),@spid) + ')'; insert into mon_spid(eventtype , parameters , eventinfo) exec(@v); update mon_spid set spid = @spid where spid is null; set @v= 'dbcc inputbuffer('+ +CONVERT(VARCHAR(20),@blocked) + ')'; insert into mon_spid(eventtype , parameters , eventinfo) exec(@v); update mon_spid set spid = @blocked where spid is null; insert into mon_lock exec sp_lock delete from mon_lock where not exists(select 'x' from mon_spid t2 where mon_lock.spid = t2.spid); commit end CLOSE @cur_cursor end
然后设置一个定时任务,定时执行改存储过程。通过查看跟踪表,找到阻塞的语句。经过一段时间时间观察后,发现了问题所在:
spid kpid blocked waittype waittime lastwaittype waitresource
159 12336 76 0x0004 60396 LCK_M_U                          KEY: 7:72057594347847680 (5e02a9cade30)                                                                                                                                                                                                                         
110 10880 144 0x0004 93584 LCK_M_U                          KEY: 7:72057594362462208 (be01fe0b23c4)                                                                                                                                                                                                                         
98 8020 95 0x0004 12089 LCK_M_U                          KEY: 7:72057594347257856 (f7013312862a)                                                                                                                                                                                                                         
110 10880 144 0x0004 993618 LCK_M_U                          KEY: 7:72057594362462208 (be01fe0b23c4)                                                                                                                                                                                                                         
110 10880 144 0x0004 1293628 LCK_M_U                          KEY: 7:72057594362462208 (be01fe0b23c4)                                                                                                                                                                                                                         
110 10880 144 0x0004 693604 LCK_M_U                          KEY: 7:72057594362462208 (be01fe0b23c4)                                                                                                                                                                                                                         
可以看到在跟踪期间,110一直被114阻塞。再看看110和114分别是什么
110 Language Event 0 (@P0 nvarchar(4000))delete from mes_product_data_acquirement_transit where id= @P0         
144 Language Event 0 exec p_data_acquirement_from_wms    
发现110正是我们的删除操作,而144为一个存储过程。是改存储过程阻塞了该删除操作。
110 7 1924917929 2 KEY (be01fe0b23c4)       U WAIT
144 7 1924917929 2 KEY (be01fe0b23c4)       X GRANT
再细看存储过程,发现该存储过程就一条SQL语句类似:
insert into ... select ..
的形式 ,而insert的表就是110要delete的表,而且后面的select 执行相当缓慢。最后经过优化后面的select 语句。问题解决。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21124603/viewspace-767061/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21124603/viewspace-767061/

SQL SERVER 对象被BLOCK跟踪相关推荐

  1. 使用DBATools编写SQL Server对象脚本

    This article gives an overview to generate scripts for SQL Server objects with Windows PowerShell to ...

  2. [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

    原帖由 qingyun 于 2010-6-21 15:44 发表  在写pl/sql的时候,有个很重要的注意点: 比如: begin   update  某个sqlserver的表@dblink名字 ...

  3. sql server 对象名无效的解决方法

    sql server 对象名无效的解决方法 参考文章: (1)sql server 对象名无效的解决方法 (2)https://www.cnblogs.com/meetcomet/p/3477937. ...

  4. SQL Server中的查询跟踪列值

    Sometimes, when I saw expressions like 'Expr1002' or 'WindowCount1007' or something similar in the c ...

  5. 解决thinkphp6读取sqlserver报Microsoft[SQL Server]对象名 ‘information_schema.tables‘ 无效错误

    先感谢思路 https://weiku.co/article/37/ 需要修改thinkphp里面sqlserver数据库驱动,不要去改composer里面的东西.所以只能自己重写驱动,并且在data ...

  6. SQL Server 默认跟踪(Default Trace)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 查看默认跟踪信息(Default Tr ...

  7. SQL Server中关于跟踪(Trace)那点事(转载)

    前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中"跟踪"也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充 ...

  8. 如何记录SQL Server数据库对象

    介绍 (Introduction) In any good programming reference, you will read that a developer has to document ...

  9. sql server无效的对象名称 - 但表列在SSMS表列表中

    本文翻译自:sql server invalid object name - but tables are listed in SSMS tables list I am attempting to ...

最新文章

  1. ng new ng-pro 报错(创建angular6项目报错)
  2. IIS部署asp.net core webapi
  3. Mac~git学习和应用需要注意的几个点
  4. Java集合:List转数组互转
  5. 无法嵌入互操作类型“……”,请改用适用的接口的解决方法
  6. 常见窗函数的C语言实现及其形状,适用于单片机、DSP作FFT运算
  7. DockerFile 入门到精通
  8. springboot系列四、配置模板引擎、配置热部署
  9. 信息学奥赛一本通(1207:求最大公约数问题)
  10. ArcGIS9.2的新变化
  11. 剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)
  12. 易筋SpringBoot 2.1 | 第三篇:RestTemplate请求HTTP(1)
  13. 山东计算机平面设计学校,什么人适合学平面设计?山东有哪些开设平面设计的学校?...
  14. nmake下一些错误的解决办法
  15. E大调第一个指型_初学吉他大调与对应小调的知识,看完这个就懂了
  16. Win10 - 使用‘Alt+Tab’不能切换窗口及更改切换风格
  17. 亚马逊速卖通tro律所禁令冻结资金的解决方法
  18. OSChina 周五乱弹 —— 美团外卖程序崩溃的真相
  19. 5 行 Python 代码就能让你的电脑永不息屏!
  20. Ubuntu系统打不开windows磁盘文件

热门文章

  1. 交换机配置SNMP团体字
  2. WARNING: You are using pip version xx; however, version xx is available.解决方法。
  3. ArcGIS教程:汇
  4. leetcode-种花问题
  5. JumpServer(堡垒机)开源版本图文详解
  6. seo网站推广方法简介
  7. Ubuntu查看usb设备驱动/usb以太网卡设备驱动
  8. 【21天转型区块链】DAY2
  9. rt-thread i2c 使用教程
  10. HC-SR04超声波测距模块使用方法和例程(STM32)