sql server update被另一个事务阻塞,更新中的并发性

时间:2016-01-07 13:22:22

标签: sql-server locking

两个SP一个接一个地执行,第二个SP被第一个阻止。他们都试图更新同一张桌子。两个SP如下:

  1.   

    创建程序[dbo]。[SP1]
      开始

         

    设置交易隔离级别快照;
      开始交易ImpSchd

         

    更新表t1 .......... ................................ //更新   一组[n1,n2 .... n100]记录

         

    COMMIT TRANSACTION ImpSchd
      设置交易隔离级别   READ COMMITTED;

         

    END

  2. 2

      

    CREATE PROCEDURE [dbo]。[SP2]

         

    开始

         

    更新表t1 .......... ................................ //更新   一组[n101,n102 ..... n200]记录

         

    END

    我的问题是当sp1运行时是快照级别隔离,为什么阻止sp2(n都更新不同的记录集)?

      

    如果我同时运行两个不同的记录集sp   效果很好。

    我如何克服这种情况?

    如果要为每个sp设置使用快照级别隔离更新同一个表,那么这将是一个更大的更改。

    如果两个sp必须更新表中的相同记录,我应该如何处理(两个sp都会更新不同的列)?

1 个答案:

答案 0 :(得分:0)

隔离级别仅用于不阻止选择,因此任何DML都不会受到隔离级别的影响。在这种情况下,更新会在表上执行IX锁定,然后在行上执行xlock更新。因为您要批量更新,表格由于锁升级,它本身可能已被锁定。希望这有帮助