• SQL Server deadlock 分析


    你有时候就你喜欢的书。 --冯唐

    1.      SqlServer发生dead-lock 事件,主要是因为存在两个线程分别占有某个资源的独占锁,然后这两个线程再去获取对方拥有的资源的独占锁。这样就导致了dead-lock发生。

    2.      SqlServer 在遇到dead-lock后,会从两个线程中选取一个线程作为winner,winner的事务接着执行,另个线程则会成为loser,loser的事务则会rollback,对于loser,SqlServer则会给返回一个error message给应用程序,如果应用程序健壮,会处理这个error,得到了这个dead-lock error,则会再次提交刚才失败的事务。如果没有处理,则会出现错误。

    3.    在SqlServer中可以利用Sql Server Profiler 来跟踪死锁的发生。具体过程如下:

             3.1 选择相关事务,如下图:

             若sql server 遇到死锁,列表中的事件就会被触发,从而可以跟踪判断是什么原因导致了dead-lock发生。

             3.2 运行跟踪

             需要将教务系统中遇到的dead-lock情况再次复现。让sql Server profiler来捕获。

            

             3.3   分析跟踪

             再获取到dead-lock的现象后,可以在profiler看到类似于下面这样的图:

    其中图中可以看出,第9行出发了dead-lock events,可以看到具体的描述信息。在第13,14行可以看出,其中一个事务被强制rollback,另一个事务继续执行。其中第11行可以点击查看更详细的信息。看出具体是什么sql语句导致dead-lock,两个事务是在获取什么资源时发生dead-lock。

             3.4   获取到这些信息之后,再结合具体的代码逻辑,做进一步的深入分析。

     参考文档:

    http://www.simple-talk.com/sql/learn-sql-server/how-to-track-down-deadlocks-using-sql-server-2005-profiler/

  • 相关阅读:
    软件测试需求分析与跟踪
    应用程序通用测试技术
    测试计算机软件发展历史
    多个iframe的刷新问题
    web:div模块自适应问题
    求:多人合作代码管理的好办法
    第一天
    jQuery,选择器,选择父页面的元素
    鼠标移入移出冒泡事件解决 Jquery mouseenter和mouseleave
    jQuery DOM操作IE6兼容性
  • 原文地址:https://www.cnblogs.com/liuan/p/2724432.html
Copyright © 2020-2023  润新知