SQL Server服务器端跟踪并定位导致死锁的SQL

《数据库锁机制》《模拟系统登录时卡死以简单了解数据库原理》《Oracle数据表死锁的解决方法》《深入浅出SQL Server中的死锁》《怎么捕获和记录SQL Server中发生的死锁》《SqlServer 并发事务:死锁跟踪(一)简单测试》《SqlServer 并发事务:死锁跟踪(二)确定死锁锁定的资源》《SqlServer 并发事务:死锁跟踪(三)6种跟踪死锁的方法总结》

说明

在多线程/多进程的程序中并发操作数据库,如果对数据库的运行原理理解的不深入,编写的代码没有考虑数据库运行原理的话,就很有可能导致死锁的发生,那么就需要赶紧解决问题,而我最近也遇到了一个SQL Server死锁的问题,所以趁此机会研究一下死锁的排查方法

SQL Server死锁时候报错的信息一般是:事务(进程 ID 54)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

那么应该怎么排查?最好的方法当然是先定位到导致死锁的两条SQL,然后再去相关的程序源码中找到相应的SQL、检查对应的代码逻辑,分析并发情况下死锁的原因,然后破坏死锁产生的条件来解决死锁问题

上面的相关博客中有多种方法,这里先整理出一个简单、有效的方法:利用服务器端跟踪。其消耗小,在最繁忙的系统中也可使用。其他的方法会在日后慢慢研究和整理补充

模拟SQL Server死锁

参考《数据库锁机制》,创建数据库、创建表、模拟200万条记录

然后分别在SQL Server Management Studio打开两个会话,分别执行下面的两条语句以模拟死锁

–会话一 begin tran select * from testLock..test(holdlock); –holdlock意思是加共享锁,直到事务结束才释放 update testLock..test set name = \\\’joker\\\’; commit; –会话二 begin tran select * from testLock..test(holdlock); update testLock..test set name = \\\’xumeng\\\’; commit;

更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » SQL Server服务器端跟踪并定位导致死锁的SQL

登录

找回密码

注册