<b>sql server死锁的检测办法</b>[MSSQL防范]
本文“<b>sql server死锁的检测办法</b>[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
sql server死锁是在sql server数据库中常常发生的情形,下面就将对sql server死锁举行深化的解读,供您参考.
死锁(deadlock)指进程之间彼此永久阻塞的状况,SQL可以检测到死锁,并挑选终止此中一个事件以干涉sql server死锁状况.两个进程发生sql server死锁的典型例子是:进程T1中获得锁A,申请锁B;进程T2中获得锁B,申请锁A,我们下面着手来演示一下这种情形:
1. 成立一个Database,名为InvDB.
2. 履行下面脚本成立person表并填充两条数据:
3. 在SQL Server Management Studio的两个窗口中同时履行下面的查询:
这段代码在默许的READ COMMITTED断绝级别下运行,两个进程辨别在获得一个排它锁的情形下,申请对方的同享锁从而造成死锁.
可见一个进程可以正常更新并显示后果,而另一个进程已经被回滚:
(1 row(s) affected)
Msg 1205, Level 13, State 45, Line 8
Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
4. 启动 SQL Server Profiler,挑选下面4种Events:
再履行一次上面的死锁实行,可以看到以下所示的死锁图:
非常风趣的一点是:第二次履行上述语句不会发死活锁!这是因为此时两个进程中,SQL Server会智能的辨认出update语句是不需求做的,所以都不会去获得排它锁,当然也就不会死锁了.SQL Server 2008 的查询优化器还真是非常强盛!
<以上是“<b>sql server死锁的检测办法</b>[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |