SQL优化中的重要概念:死锁
上面几篇文章讲到 事务、锁定、阻塞,最后还有一种比较极端的情况,就是死锁,这也是锁定、阻塞的一种情况。
死锁是当两个事务分别锁定了资源,而又继续请求对方已获取的资源,那么就会产生死锁。
发生死锁的原因:
A、会话以不同的顺序访问表。
B、会话长时间运行事务,在一个事务中更新了很多表或行,这样增加了冲突的可能。
C、会话1申请了一些行锁,会话2申请了一些行锁,之后决定将其升级为表锁。
如果这些行在相同的数据页面中,并且两个会话同时在相同的页面上升级锁粒度,就会产生死锁。
1、会话1
-
set lock_timeout 1000
-
--跟踪死锁--会话1
-
set transaction isolation level serializable
-
-
begin tran
-
-
update t
-
set v ='563'
-
where idd =2
-
-
waitfor delay '00:00:10'
-
-
update t
-
set v = '963'
-
where idd =1
-
-
COMMIT
2、会话2
-
set transaction isolation level serializable
-
-
begin tran
-
-
update t
-
set v ='234'
-
where idd =1
-
-
waitfor delay '00:00:10'
-
-
update t
-
set v = '987'
-
where idd=2
-
-
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输出信息性消息
-
-
--跟踪1222能把详细的死锁信息返回到SQL Server的日志中
-
--标志位-1表示跟踪标志位1222应该对所有SQL Server连接全局启用
-
DBCC TraceOn(1222,-1)
-
go
-
-
--验证标志位是否启动
-
DBCC TraceStatus
-
go
-
-
--关闭标志位
-
DBCC TraceOff(1222,-1)
-
go
4、设置死锁优先级--设置死锁的优先级,调整一个查询会话由于死锁而被终止运行的可能性
SET DeadLock_Priority Low | Normal | High | numeric-priority
-
--是当前连接很有可能被终止运行
-
set deadlock_priority Low
-
-
--SQL Server终止回滚代价较小的连接
-
set deadlock_priority Normal
-
-
--减少连接被终止的可能性,除非另一个连接也是High或数值优先级大于5
-
set deadlock_priority High
-
-
--数值优先级:-10到10的值,-10最有可能被终止运行,10最不可能被终止运行,
-
--两个数字谁大,谁就越不可能在死锁中被终止
-
set deadlock_priority 10
SQL优化中的重要概念:死锁的更多相关文章
- SQL优化中的重要概念:事务
原文:SQL优化中的重要概念:事务 sql 优化和事务有关系? 从表面上看,让sql跑的更快,似乎和事务这个概念没什么联系,但是关系数据库中最重要的2个概念就是 关系.事务. 关系,对应到sql中,是 ...
- SQL优化中的重要概念:锁定
原文:SQL优化中的重要概念:锁定 上篇文章讲的是事务,这篇就引出另一个重要概念,就是锁定. 当一个用户要读取另一个用户正在修改的数据,或者一个用户正在修改另一个用户正在读取的数据,或者一个用户要修改 ...
- SQL优化中的重要概念:阻塞
原文:SQL优化中的重要概念:阻塞 上一篇讲到锁定的概念,那么接下来就是如何找到由于锁定而发生阻塞的进程,并解决阻塞问题. 1.会话1,修改数据,但没有提交事务 BEGIN TRAN select @ ...
- Sql Server 中锁的概念(1)
Sql Server 中锁的概念 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破 ...
- 理解SQL Server中索引的概念
T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他 简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...
- Sql Server 中锁的概念
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...
- 面试被问之-----sql优化中in与exists的区别
曾经一次去面试,被问及in与exists的区别,记得当时是这么回答的:''in后面接子查询或者(xx,xx,xx,,,),exists后面需要一个true或者false的结果",当然这么说也 ...
- T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他
简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...
- 理解SQL Server中索引的概念,原理
转自:http://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html 简介 在SQL Server中,索引是一种增强式的存在,这意味着, ...
随机推荐
- OpenJudge计算概论-自整除数
/*=================================================== 自整除数 总时间限制: 1000ms 内存限制: 65536kB 描述 对一个整数n,如果其 ...
- 唯品会HDFS性能挑战和优化实践
唯品会HDFS性能挑战和优化实践 原创: 大数据平台 唯技术 4月1日 https://mp.weixin.qq.com/s/LMa99ubgACI4eaDV3G-6gw
- HTML5 地理位置定位API(2)
HTML5 Geolocation API (地理位置应用程序接口) 目前PC浏览器支持情况: Firefox 3.5+Chrome 5.0+Safari 5.0+Opera 10.60+Intern ...
- 记EXSI虚拟机CentOS7断电无法启动修复过程
参考:https://msd.misuland.com/pd/3148108429789233656 EXSI6.7安装虚拟机CentOS7.5 1804 断电后启动页面进度条很慢 最后出现如下提示 ...
- iOS-AVPlayer使用
1引入AVFoundation.framework框架 2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件 代码如下: 自定义播放的View, ...
- iOS-KVO(转)
参考学习网址:http://blog.sina.com.cn/s/blog_71715bf8010166ut.html KVO就是NSKeyValueObserving的缩写,它也是Foundatio ...
- iOS-UIScreen,UIFont,UIColor,UIView,UIButton
6.1 UIScreen // 屏幕的宽度 CGFloat screenW = [UIScreen mainScreen].bounds.size.width; 6.2 UIFont + (UIFon ...
- LNMP V1.4正式版本安装及新增Let's Encrypt一键安装和其他功能
军哥的LNMP一键安装包已经有一些年头了,着实给需要在Linux VPS.服务器中安装WEB环境的用户提供不小的帮助,而且每年儿童节都会有较大版本的更新和升级.老左在二月份的时候有体验过LNMP V1 ...
- laydate时间控件:开始时间,结束时间最大最小值
时间控件地址及插件下载链接:https://www.layui.com/doc/modules/laydate.html 填充时间已两个功能为例: 1.添加功能 :时间 规则:选择开始时间后,点击结束 ...
- 【VS开发】【数据库开发】windows下libevent x64库静态编译
按照libevent的文档,使用VC的nmake -f Makefile.nmake即可编译32位release模式.因为项目中要求编译64位的版本,需要在Makefile.nmake中添加一个LIB ...
