- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL Server 2008中SQL应用之一“死锁(Deadlocking)”
SQL Server 2008中SQL应用之一“死锁(Deadlocking)”
2011-02-28 13:19 邀月 博客园 HYPERLINK /art/201102/246479.htm \l commment \t _self 我要评论(0) 字号: HYPERLINK javascript:setfont(12); \t _self T | HYPERLINK javascript:setfont(16); \t _self T
为什么会发生死锁?如何利用SQL Server Profiler分析死锁呢?我们要怎么找到死锁?以及又该怎么设置死锁优先级呢?作者将在下文中一一为大家解答。
AD:
当一个用户会话(会话1)已经落定了一个资源,而另一个会话(会话2)想要修改该资源,并且会话2也锁定了会话1想要修改的资源时,就会出现“死锁”(deadlocking)。在另一方释放资源前,会话1和会话2都不可能继续。所以,SQL Server会选择死锁中的一个会话作为“死锁牺牲品”。
注意:死锁牺牲品的会话会被杀死,事务会被回滚。
注意:死锁与正常的阻塞是两个经常被混淆的概念。
发生死锁的一些原因:
1、应用程序以不同的次序访问表。例如会话1先更新了客户然后更新了订单,而会话2先更新了订单然后更新了客户。这就增加了死锁的可能性。
2、应用程序使用了长时间的事务,在一个事务中更新很多行或很多表。这样增加了行的“表面积”,从而导致死锁冲突。
3、在一些情况下,SQL Server发出了一些行锁,之后它又决定将其升级为表锁。如果这些行在相同的数据页面中,并且两个会话希望同时在相同的页面升级锁粒度,就会产生死锁。
一、使用 SQL Server Profiler 分析死锁
/zh-cn/library/ms188246.aspx
二、使用跟踪标志位找出死锁
本文主要介绍使用DBCC TRACEON、DBCC TRACEOFF和DBCC TRACESTATUS命令来确保死锁被正确记录到SQL Server Management Studio SQL日志中。这些命令用来启用、关闭、和检查跟踪标志位的状态。
■ DBCC TRACEON,启用跟踪标志位。用法:DBCC TRACEON ( trace# [ ,...n ][ , -1 ] ) [ WITH NO_INFOMSGS ]
详细参看 MSDN:/zh-cn/library/ms187329.aspx
■ DBCC TRACESTATUS,检查跟踪标志位状态。用法:DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] ) [ WITH NO_INFOMSGS ]
详细参看 MSDN:/zh-cn/library/ms187809.aspx
■ DBCC TRACEOFF,关闭跟踪标志位。用法:DBCC TRACEOFF (trace# [ ,...n ] [ , -1 ] ) [ WITH NO_INFOMSGS ]
详细参看 MSDN:/en-us/library/ms174401.aspx
下面我们模拟一个死锁:
在第一个SQL查询窗口执行:
use AdventureWorks
go
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
WHILE 1=1
BEGIN
BEGIN TRAN
UPDATE Purchasing.Vendor
SET CreditRating = 1
WHERE VendorID = 90
UPDATE Purchasing.Vendor
SET CreditRating = 2
WHERE VendorID = 91
COMMIT TRAN
END
在第二个查询窗口执行:
use AdventureWorks
go
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
WHILE 1=1
BEGIN
BEGIN TRAN
UPDATE Purchasing.Vendor
SET CreditRating = 2
WHERE VendorID = 91
UPDATE Purchasing.Vendor
SET CreditRating = 1
WHERE VendorID = 90
COMMIT TRAN
END
等待几秒后,其中一个查询窗口会提示:
/*
Msg 1205, Level 13, State 51, Line 9
您可能关注的文档
最近下载
- 来法莫林药物市场调研报告202312.pdf VIP
- [煤矿标准]GBT 20475.3-2012 煤中有害元素含量分级 第3部 分砷.pdf
- 2024年山东威海初中学业水平考试生物试卷真题(含答案详解).docx
- 山东亚洲金属循环利用环保有限公司年处理30万吨废旧蓄电池.doc VIP
- 耐克森nexans卷筒电缆.pdf
- 广州某银行业务连续性管理办法.pdf VIP
- 人教鄂教版五年级上册科学期末综合训练(含答案).docx
- 如何玩转抖音.pptx VIP
- 2024必威体育精装版“学宪法讲宪法”知识竞赛题库与答案.pdf
- 2023年哈尔滨工业大学(深圳)计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案).docx VIP
文档评论(0)