首页 > 代码库 > 数据库一般死锁处理办法
数据库一般死锁处理办法
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 Lock212 Rollback Tran;13 分析二窗口:14 Begin Tran15 Update Lock2 Set C1=C1+1;16 WaitFor Delay ‘00:01:00‘;17 SELECT * FROM Lock118 Rollback Tran;
执行完会出现死锁提示:
事务(进程 ID 54)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
如果开启数据库监控的话会很直观的看到死锁图形,通过数据库监控的死锁图形描述信息就可以得出是哪个sql语句引发的死锁。
此时找到引发死锁的sql语句在查询的时候:SELECT * FROM Lock2 with(nolock) (加这个)就可以避免死锁。注意这种方式会引发(脏读)如果系统业务对脏读要求不是很高的话,可以采用此种办法解决死锁。
数据库一般死锁处理办法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。