【问题标题】:When an UPDATE/DELETE transaction acquires lock on a row when a huge number of rows are to be updated当 UPDATE/DELETE 事务在要更新大量行时获取行上的锁时
【发布时间】:2023-02-21 22:03:33
【问题描述】:

假设我有一个 DELETE/UPDATE 语句应该更新/删除 1 亿行。 那么 DELETE/UPDATE 语句会在事务开始时获取整个 1 亿行的锁,还是会在更新值时遇到行时获取锁?

事实证明,模拟这种情况对我来说非常困难。任何帮助将不胜感激。

【问题讨论】:

    标签: postgresql database-deadlocks


    【解决方案1】:

    我不能确定它是否适用于所有 RDBMS,但对于 Postgres、MS SQL Server 和 Oracle 以下内容是正确的:

    在开始更新任何内容之前,DBMS 会尝试获取每一行的锁,只有在它获得所需的每一行的锁之后,它才会开始更新/删除。

    同样有趣的是,假设您需要更新 ID 为 1,2 和 3 的行。 假设 2 被锁定,您的更新仍将锁定第 1 行和第 3 行,并且它会等待第 2 行也锁定它,直到它持有第 1 行和第 3 行的锁,并且只有当它获得第 2 行的锁时以及更新所有 3 行 - 只有它释放锁。

    希望这些信息能以某种方式帮助您。

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多