很多人都遇到过这样的情况,当网站达到一定的访问量,数据库就会成为瓶颈,有可能发生死锁,进而引起阻塞。

有人认为这可能就是硬件的极限了,于是想办法增加硬件设备。而我本人认为问题的元凶可能是性能不高的sql脚本,引起了死锁,进而导致阻塞。

如果你和我有相同的看法,那我们就一起想办法找出问题的源头。

案例1.

某一天我被告知,我们的书城网站不能访问了,我马上查看,发现书城的有两台iis服务器均显示service unavailable,如果我断定是sqlserver数据库发生了死锁。

要知道是否发生了死锁,当然要看master库的sysprocess表,看看是否有什么进程堵住了别的进程,语句如下:

Select * from master..sysprocesses where blocked > 0

很快我发现,有一个blocked = 51 堵住了很多进程(查看blocked列可见),果然和我的判断吻合;为了进一步找出发生死锁的语句,我用到的如下的语句

dbcc inputbuffer(51);

结果如下:

EventType      Parameters            EventInfo

------------------------------------------------

RPC Event      0                          p_Book_content;1

从上面就可以看出是p_Book_content 这个过程引起的阻塞,但是这个过程里面同时对多个表进行了操作,到底是那个语句出了问题呢?

下面我们再来进一步定位死锁的位置:

Sp_lock

结果如下(大部分数据略)

Spid        dbid        objid          indid      type  resource  mode      status

-------------------------------------------------------------------------------------------------

51          14          206623779    0        TAB                X            WAIT

52          14          0            0        DB                S            GRANT

53          14          0            0        DB                S            GRANT

。。。

。。。

。。。

现在我们来看看spid = 51 这行, mode = X 表示排它锁, status = WAIT表示正在等待(即阻塞了),dbid = 14 是数据库的id,objid = 206623779 是被锁的对象id,我们可以通过下列函数得到数据库和表:

Select db_name(@dbid) -----》book_db

select object_name(@objid) -------》 t_book

即book_db库的t_book表被锁住了,这时候再回投仔细检查 p_Book_content 存储过程,发现只有一个语句对t_book进行了操作:

update t_book set hitcount = hitcount + 1 where bookid = @bookid

这个语句的作用是更新书本的点击次数,为什么上面这个语句会引起死锁呢?我认为最可能的情况应该是同时访问的人过多,同时对表进行过多的update操作引起的,所以最终改用别的方式,不再实时对t_book表进行update操作,而是每次访问都先insert一条记录到一个中间表中,然后再用一个作业,每隔10分钟定时更新书本的点击次数,如此改进之后,此问题终于圆满解决了。

相关资料在book online可以找到, 关键字: sp_lock , sysprocesses , dbcc inputbuffer , db_name(), object_name()

sqlserver之定位死锁(经验分享)相关推荐

  1. 2023级安全岗面试题及面试经验分享

    写在前面 个人强烈感觉面试因人而异,对于简历上有具体项目经历的同学,个人感觉面试官会着重让你介绍自己的项目,包括但不限于介绍一次真实攻防/渗透/挖洞/CTF/代码审计的经历 => 因此对于自己的 ...

  2. 2023级网络安全岗面试题及面试经验分享

    在当今社会网络安全行业越来越发达,也有越来越多的人去学习,为了更好地进行工作,除了学好知识外还要应对企业的面试. 所以在这里我归总了一些网络安全方面的常见面试题,希望对大家有所帮助. 一个2023届毕 ...

  3. 华师大数据科学考研_2020年华东师范大学行政管理专业考研报录比、参考书目、考研经验分享...

    一.考研选择该校的原因以及考虑到的因素 1.学校定位,对比本科学校.每个人考研都有一个非常重要的原因,就是去比本科更好的学校,提高出身问题.所以大家都想考985.211.我也不例外,因为我本科是211 ...

  4. 近期活动盘点:基于雷达图像预测未来降水参赛经验分享、智慧政府讲座、金融AI思享会、数据法学研讨会(11.29-11.30)

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: CIKM AnalytiCup 2017-基于雷达图像预测未来降水参赛经验分享 2017年11月29日 活动简介: 清华大学清华-青岛数据 ...

  5. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分...

    我也是本着善意把自己的代码结构分享给大家,欢迎大家用批评指点.首先我为什么把这个标题写为恶人,因为我很喜欢招惹别人,因为喜欢跟别人交流,喜欢指出别人的缺点,偷偷学习别人的优点,所以大家都会反感我,因为 ...

  6. 计算机本科211调剂到双非值得吗,经验分享:从双非到211,调剂是场快准狠的战役...

    经验分享:从双非到211,调剂是场快准狠的战役 摘要:最近在论坛中,看到很多18的学弟学妹们焦急询问调剂的相关事宜,作为一个过来人,我是有一些经验的,今天和大家分享我调剂的过程,希望对大家有所帮助. ...

  7. 工作三年的Android程序员 跳槽到“阿里“的面试经验分享

    前言 工作三年,你可能会迷茫,要么觉得自己怀才不遇,要么觉得自己迷失方向,也可能觉得自己意气风发,不管怎么样,自己已经开始思考自己的人生了,事实上,很多工作三年的人就第一次做出了自己的选择,也就是换一 ...

  8. 有关项目实施【老男孩】的经验分享

    有关项目实施[老男孩老师]的经验分享 [下面的内容适合给客户项目实施及企业内部运维项目.开发项目等] 例如:老男孩为其他企业服务过的运维及运维开发相关项目 项目1:ldap跨多机房统一认证及授权管理方 ...

  9. java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    关于Java解压文件的一些坑及经验分享 就在本周, 测试人员找到我说现上的需求文档(zip格式的)无法预览了, 让我帮忙看看怎么回事. 这个功能也并不是我做的, 于是我便先看看线上日志有没有什么错误, ...

最新文章

  1. linux 文件和打印机共享文件夹,linux服务器向windows客户端提供文件/目录及打印机共享...
  2. 释疑の字段符号 FIELD-SYMBOLS
  3. Linux下使用g++编译C++程序——Compiling Cpp
  4. java激光推送ios_关于ios极光推送server端注意的地方
  5. 幅度和幅值有区别吗_16G内存够用吗?8G/16G/32G内存横向对比
  6. php执行另一个页面,从另一个PHP脚本执行PHP脚本
  7. OC高效率52之“方法调配技术”调试“黑盒方法”
  8. Flex3 Chart学习笔记:PieChart(饼图)
  9. Oracle中的sql操作符 和分析函数
  10. JSP 中 pageEncoding 和 charset 区别以及中文乱码解决方案
  11. .NET 5(C#) 将控制台程序(Console Application)发布成单个exe文件
  12. 基于单片机无线防丢报警器设计过程分享
  13. java的第一个代码模型,简单的java类
  14. 计算机windows错误恢复,教你“Windows错误恢复”的修复方法技巧
  15. docker启动elasticsearch容器put数据时: SERVICE_UNAVAILABLE/1/state not recovered /initialized
  16. 软件充值功能测试点有哪些?以手机话费充值为例
  17. SpringBoot启动失败:出现错误——HikariPool-1 - Shutdown initiated...后立即出现 HikariPool-1 - Shutdown completed.
  18. 位(bit)、字节(Byte)、MB(兆位)之间的换算关系
  19. 用C语言求一元二次方程的解
  20. 计算机三级知识点总结

热门文章

  1. 硅谷顶级VC发声:AI技术公司毛利实在太低,人工和算力成本太高
  2. 1分钟10万字大法:量子波动速读、蒙眼翻书穿针,这是席卷15省的最新智商税...
  3. Kaldi拜拜!PyTorch语音工具包SpeechBrain要来了,支持多种语音任务,实现最强水准...
  4. 上海虹桥站 启动建设5G网络,DMA助力5G加速
  5. 从地址字符串获取省市区信息
  6. JSONPlaceholder使用
  7. 谁在“唱衰”OpenStack?
  8. 怎么解决tomcat占用8080端口问题图文教程
  9. CMMI入门-通用目标的实施- GG3
  10. C#的加密解密算法,包括Silverlight的MD5算法