首页 / 更多教程 / SQL优化中的重要概念:死锁
SQL优化中的重要概念:死锁
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL优化中的重要概念:死锁,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2062字,纯文字阅读大概需要3分钟。
内容图文
![SQL优化中的重要概念:死锁](/upload/InfoBanner/zyjiaocheng/880/6efca05881c842d889a810557db65bfe.jpg)
上面几篇文章讲到 事务、锁定、阻塞,最后还有一种比较极端的情况,就是死锁,这也是锁定、阻塞的一种情况。
死锁是当两个事务分别锁定了资源,而又继续请求对方已获取的资源,那么就会产生死锁。
发生死锁的原因:
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
不想长大啊 发布了416 篇原创文章 · 获赞 135 · 访问量 94万+ 他的留言板 关注
内容总结
以上是互联网集市为您收集整理的SQL优化中的重要概念:死锁全部内容,希望文章能够帮你解决SQL优化中的重要概念:死锁所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。