码迷,mamicode.com
首页 > 数据库 > 详细

数据库一般死锁处理办法

时间:2015-01-08 17:28:08      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

1.先模拟一个死锁:

 1 CREATE TABLE Lock1(C1 int default(0));
 2 CREATE TABLE Lock2(C1 int default(0));
 3 INSERT INTO Lock1 VALUES(1);
 4 INSERT INTO Lock2 VALUES(1);
 5 
 6 --将如下代码分别放到两个查询分析器窗口:
 7     分析一窗口:
 8 Begin Tran
 9   Update Lock1 Set C1=C1+1;
10   WaitFor Delay 00:01:00;
11   SELECT * FROM Lock2
12 Rollback Tran;
13     分析二窗口:
14 Begin Tran
15   Update Lock2 Set C1=C1+1;
16   WaitFor Delay 00:01:00;
17   SELECT * FROM Lock1
18 Rollback Tran;

执行完会出现死锁提示:

事务(进程 ID 54)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

如果开启数据库监控的话会很直观的看到死锁图形,通过数据库监控的死锁图形描述信息就可以得出是哪个sql语句引发的死锁。

此时找到引发死锁的sql语句在查询的时候:SELECT * FROM Lock2 with(nolock) (加这个)就可以避免死锁。注意这种方式会引发(脏读)如果系统业务对脏读要求不是很高的话,可以采用此种办法解决死锁。

 

数据库一般死锁处理办法

标签:

原文地址:http://www.cnblogs.com/wgx0428/p/4211127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!