基于不同的where子句在同一个表上同时进行DML操作

时间:2015-06-11 06:45:35

标签: sql-server locking dml

SQl Server是否可以同时运行3个作业(比如凌晨3点)更新同一个表?更新具有不同的where子句。我想知道的是,表格会陷入僵局,还是每个作业都会彼此独立运行。此外,当更新运行时它会锁定整个表吗?

1 个答案:

答案 0 :(得分:0)

如果您正在更新不同的行,则可以同时更新同一个表,但至少在以下情况下会发生死锁或至少阻塞:

  1. 您没有where子句的索引,因此更新可能会相互阻塞,因为需要扫描整个聚簇索引
  2. 由于此次更新,您需要更新其他索引,并且这些索引会发生死锁/阻塞
  3. 您正在运行其他事务(更新,选择等),这些事务具有对进程A正在尝试更新的页面的锁定,并且该进程正在等待已由进程B锁定的页面
  4. 您正在更新锁定升级发生在表锁中的许多记录
  5. 也可能还有其他情况。阻塞当然是最常见的事情,但它也可能导致死锁。