sql server deadlock跟踪的4种实现方法
前言 最近写程序常会遇到deadlock victim,每次一脸懵逼。研究了下怎么跟踪,写下来记录下。文中介绍的非常详细,对大家具有一定的参考学习价值,下面话不多说了,来一起看看详细的介绍吧 建测试数据GOUSE testdb; CREATE TABLE table1 ) INSERT INTO table1 values ('James') CREATE TABLE table2 ) INSERT INTO table2 values ('Alan') 第一段sql,先运行只更新table1部分 -- Transaction1BEGIN TRAN UPDATE table1 UPDATE table2 COMMIT TRANSACTION 第二段sql,只运行更新table2部分 -- Transaction2BEGIN TRAN UPDATE table2 UPDATE table1 COMMIT TRANSACTION 再运行,第一段sql更新table2,运行第二段sql更新table1,死锁问题重现。 说下跟踪死锁的方法: 1.使用trace log跟踪,执行如下sql开启1222和1204 flag,死锁信息会在sql server 日志中输出。下图是1204输出的信息 下图是1222输出的信息 2.使用sql server profiler进行跟踪点击Tools -> sql server profiler 选择sql locks模板 运行当发生死锁时会自动捕获,点击dead lock paragraph查看死锁 3.使用扩展事件跟踪,方法只适用于sql server 2012版本,08r2版本无法直接使用。依次点击Management -> Extended Events - >system health - >package0.event_file 输入deadlock回车,可以点击details 把内容另存为xdl文件再打开,或点击deadlock查看图 4.使用windows性能计数器检测到死锁再去sql中查询命令行输入:perfmon 或者 perfmon /sys 选择实例:SQL Server :Locks Number of DeadLocks/sec _Total 实时查看: 下面的查询提供了自从上次重启以来在本服务器上发生的所有死锁:
总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程之家的支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |