原文:SQL优化中的重要概念:死锁


上面几篇文章讲到 事务、锁定、阻塞,最后还有一种比较极端的情况,就是死锁,这也是锁定、阻塞的一种情况。

死锁是当两个事务分别锁定了资源,而又继续请求对方已获取的资源,那么就会产生死锁。

发生死锁的原因:

A、会话以不同的顺序访问表。

B、会话长时间运行事务,在一个事务中更新了很多表或行,这样增加了冲突的可能。

C、会话1申请了一些行锁,会话2申请了一些行锁,之后决定将其升级为表锁。

   如果这些行在相同的数据页面中,并且两个会话同时在相同的页面上升级锁粒度,就会产生死锁。

1、会话1


  1. set lock_timeout 1000
  2. --跟踪死锁--会话1
  3. set transaction isolation level serializable
  4. begin tran
  5. update t
  6. set v ='563'
  7. where idd =2
  8. waitfor delay '00:00:10'
  9. update t
  10. set v = '963'
  11. where idd =1
  12. COMMIT

2、会话2


  1. set transaction isolation level serializable
  2. begin tran
  3. update t
  4. set v ='234'
  5. where idd =1
  6. waitfor delay '00:00:10'
  7. update t
  8. set v = '987'
  9. where idd=2
  10. commit

3、再开启一个会话,开启跟踪

开启跟踪标志位:

              DBCC TRACEON(trace#[,...n],-1) [With No_InfoMsgs]

检查某种或某些标志位是开启,还是关闭:

              DBCC TRACESTATUS(trace#[,...n],-1) [With No_InfoMsgs]

1.trace#:指定一个或多个需要开启或需要检查状态的跟踪标志位数字

2.    -1:如果指定了-1,则以全局方式打开某种或某些跟踪标志位

3.with No_InfoMsgs:当命令中包含此参数时,则禁止DBCC输出信息性消息


  1. --跟踪1222能把详细的死锁信息返回到SQL Server的日志中
  2. --标志位-1表示跟踪标志位1222应该对所有SQL Server连接全局启用
  3. DBCC TraceOn(1222,-1)
  4. go
  5. --验证标志位是否启动
  6. DBCC TraceStatus
  7. go
  8. --关闭标志位
  9. DBCC TraceOff(1222,-1)
  10. go

4、设置死锁优先级--设置死锁的优先级,调整一个查询会话由于死锁而被终止运行的可能性

SET DeadLock_Priority  Low | Normal | High | numeric-priority


  1. --是当前连接很有可能被终止运行
  2. set deadlock_priority Low
  3. --SQL Server终止回滚代价较小的连接
  4. set deadlock_priority Normal
  5. --减少连接被终止的可能性,除非另一个连接也是High或数值优先级大于5
  6. set deadlock_priority High
  7. --数值优先级:-10到10的值,-10最有可能被终止运行,10最不可能被终止运行,
  8. --两个数字谁大,谁就越不可能在死锁中被终止
  9. set deadlock_priority 10
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

最新文章

  1. highchart访问一次后台服务返回多张图表数据
  2. Math Start!
  3. node.js在windows环境下的安装
  4. 数据结构-Hash表
  5. 鼠标滑过提示title
  6. bzoj1036 zjoi2008 树的统计 count
  7. CSS3阴影 box-shadow的使用和技巧总结[转]
  8. 二维离散平稳小波重构iswt2
  9. 你不得不了解的应用容器引擎---Docker
  10. Python全栈-magedu-2018-笔记5
  11. webshell导致项目崩溃
  12. python-Djando项目搭建
  13. macos 下安装brew
  14. POJ - 3122 Pie(二分)
  15. 【libreoffice】libreoffice实现office转pdf、html、jpg等格式数据
  16. zstu-4243 牛吃草
  17. MFC 如何在一个窗体中嵌套在另一个窗体中
  18. [leetcode]238. Product of Array Except Self除了自身以外的数组元素乘积
  19. Oracle 12c on Solaris 10 安装文档
  20. chrome 浏览器设置字体大小,方便调试

热门文章

  1. qt sql 数据库操作
  2. Mac地址转换成long长整型 2
  3. NTC热敏电阻基础以及应用和选择(转)
  4. SVG-变换
  5. Web安全测试检查点
  6. angular 中如何使用自定义组件
  7. osg MatrixManipulator CameraManipulator
  8. 更新Conda源和pip源
  9. sonar:soanrqube接口api
  10. 教你成为全栈工程师(Full Stack Developer) 四十五-一文读懂hadoop、hbase、hive、spark分布式系统架构