语境:
我本质上有一个通过 pg_cron 条目运行的后台维护脚本。它执行插入和更新,因此有时可能会锁定表/行。与数据库上其他主要读取的需求相比,该脚本的优先级较低。
问题:
在较高的层面上,我想知道是否可以做一些事情来做到这一点,以便每当维护脚本执行某些操作来阻止读取时,它都会停止正在执行的操作并避开。与 AUTOVACUUM 的工作原理类似。
例子:
作为一个例子,我想象一个 SESSION 变量将锁定时间容差设置得非常小,但这会使 lockING 命令失败而不是阻止命令。这就是优先级概念的用武之地。我找不到任何这样存在的东西。
或者也许有另一种方法可以实现相同的最终目标?
不,没有这样的设置会导致阻止命令失败而不是阻止命令失败。解决这个问题的方法是保持事务较小,这样就不会同时锁定很多行,也不会长时间锁定。您也许可以在会话中关闭 synchronous_commit,以避免 fsync 请求的风暴。这确实意味着您可能需要某种机制来重复在崩溃中丢失的工作。与 VACUUM 相比,您确实有一个优势,它需要比 INSERT 或 UPDATE 更强的表锁。因此,您通常只需要担心行锁,而不是表锁。
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |