原文: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万+

SQL优化中的重要概念:死锁的更多相关文章

  1. SQL优化中的重要概念:事务

    原文:SQL优化中的重要概念:事务 sql 优化和事务有关系? 从表面上看,让sql跑的更快,似乎和事务这个概念没什么联系,但是关系数据库中最重要的2个概念就是 关系.事务. 关系,对应到sql中,是 ...

  2. SQL优化中的重要概念:锁定

    原文:SQL优化中的重要概念:锁定 上篇文章讲的是事务,这篇就引出另一个重要概念,就是锁定. 当一个用户要读取另一个用户正在修改的数据,或者一个用户正在修改另一个用户正在读取的数据,或者一个用户要修改 ...

  3. SQL优化中的重要概念:阻塞

    原文:SQL优化中的重要概念:阻塞 上一篇讲到锁定的概念,那么接下来就是如何找到由于锁定而发生阻塞的进程,并解决阻塞问题. 1.会话1,修改数据,但没有提交事务 BEGIN TRAN select @ ...

  4. Sql Server 中锁的概念(1)

    Sql Server 中锁的概念   锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破 ...

  5. 理解SQL Server中索引的概念

    T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他   简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...

  6. Sql Server 中锁的概念

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...

  7. 面试被问之-----sql优化中in与exists的区别

    曾经一次去面试,被问及in与exists的区别,记得当时是这么回答的:''in后面接子查询或者(xx,xx,xx,,,),exists后面需要一个true或者false的结果",当然这么说也 ...

  8. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  9. 理解SQL Server中索引的概念,原理

    转自:http://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html 简介 在SQL Server中,索引是一种增强式的存在,这意味着, ...

随机推荐

  1. CRF 初步了解

    国外有一个很著名的条件随机场的教程,是英文的,原文: http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields ...

  2. iptables+ipset自动封闭和解封频繁访问web服务的恶意IP

    转载于互联网     iptables直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会严重下降,iptables是O(N)的性能.而ipset就像一个集合,把需要封 ...

  3. Jupyter Notebook 远程连接配置(转载)

    转载博客的Jupyter Notebook远程连接配置方法. 0 - 参考资料 https://www.jianshu.com/p/08f276d48669?utm_campaign=maleskin ...

  4. 001-http-总览、文件配置、常用http client、http连接池

    一.概述 http请求项目搭建:地址:https://github.com/bjlhx15/common-study.git 中的common-http 主要针对post请求中的,form表单[app ...

  5. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_12-用户退出-服务端

    实现退出 用户退出要以下动作: 1.删除redis中的token 2.删除cookie中的token controller内定义 spring securety config内放行 对这个url放行 ...

  6. 123457123456#0#-----com.yuming.FromPuzzleGame01--前拼后广--宝宝农场拼图cym

    com.yuming.FromPuzzleGame01--前拼后广--宝宝农场拼图cym

  7. Java点滴-List<Integer> list; 中尖括号的意思

    这是jdk1.5后版本才有的新特性,泛型,指定传入的类型.这样定义之后,这个list只能接收Integer的对象. 以前没有加这个,传入的都是Object类型的,取出来的时候要强制类型转换为自己想要的 ...

  8. MySQL设置可以远程连接

    在MySQL命令行执行如下: use mysql; grant all privileges on *.* to root@'%' identified by "password" ...

  9. 游戏协议模拟测试工具(TcpEngine)使用简介

    功能介绍 在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发.在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或 ...

  10. web前端三大主流框架的对比

    MVX框架模式:MVC+MVP+MVVM 1.MVC:Model(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职责分开. View通过Controller来 ...