PostgreSQL中是否存在低优先级查询?

4

背景:

我有一个后台维护脚本,通过pg_cron条目运行。它执行插入和更新操作,因此有可能在某些时候锁定表/行。与数据库上的大部分读取需求相比,该脚本优先级较低。

问题:

总体而言,我想知道是否有一些方法,使得每当维护脚本阻止读取时,它就停止正在进行的操作并让出资源。类似于AUTOVACUUM的工作原理。

示例:

例如,我设想使用SESSION变量将锁定时间容差设置为非常小的值,但是令锁定命令失败而不是被阻塞的命令失败。这就是优先级概念的应用场景。我找不到任何现有的类似解决方案。

或者还有其他实现同样目标的方法吗?


我想要类似的东西 - 实际上是类似于“nice”或“ionice”的查询。 - Stuart Axon
1个回答

4
没有这样的设置可以使阻止命令失败而被阻止的命令成功。一个解决方法是保持事务小,因此不会一次锁定太多行,并且不会长时间锁定。你可以在会话中关闭synchronous_commit,以避免fsync请求风暴。这意味着你可能需要一些机制来重复在崩溃中丢失的工作。你比VACUUM更具优势,它需要比INSERT或UPDATE更强的表锁。因此,你只需要担心行锁,而不是表锁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接