14、然后在第二个窗口会看到下面的消息:

  15、切换到SQLServer Profiler,可以看到下面的截图:

  16、点击【Deadlock graph】时间,会显示死锁的图像:

  17、可以保存死锁图像,右键然后选择导出事件数据,并另存为xdl文件:

  下面是其XML格式:

  分析:

  在本文中,首先创建一个Profiler空白模版,然后选择下面的事件进行监控:

  1、Deadlock graph

  2、Lock:Deadlock

  3、Lock:Deadlock Chain

  4、SQL:StmtCompleted

  5、SQL:StmtStarting

  然后通过限定数据库,来限制监控过得对象范围。

  在配置好之后,运行跟踪,并在ssms中运行脚本。SQLServer会自动处理和侦测这种类型的死锁。然后会在第二个窗体中收到1205的错误。

  在SQLServer Profiler中,演示了如何收集死锁事件,在跟踪结果中可以看到两个事务尝试在一个拥有共享锁的键上添加排它锁。通过死锁图像,可以看到死锁发生的细节。

  为了避免或者小化死锁的发生,有一些建议可以参考:

  1、确保你的事务尽可能地小,这里指范围。

  2、使用较低隔离级别的事务。

  3、对于可能的查询,使用NOLOCK查询提示。

  4、规范化数据库设计。

  5、在需要的列上创建索引,以便是表不需要经常扫描,减少锁问题的发生。

  6、控制数据库对象访问的顺序是相同的顺序。