死锁最佳实践

Too*_*n21 7 postgresql deadlock locking postgresql-9.3

我们正在运行 Postgres 9.3,偶尔会出现死锁问题。目前有人注意到并将手动终止进程。当它们发生时,是否有处理这些问题的最佳实践?我知道有一个statement_timeoutlock_timeoutdeadlock_timeout但大多数地方,我读状态,你不想设置此的postgres.conf文件。

只是想看看是否有典型/最佳实践方法。看起来将 deadlock_timeout 设置为 10 分钟就足够了,但我想确保我没有遗漏一些关键的东西,为什么这会是一个坏主意。

Erw*_*ter 5

10 分钟对于 来说是一个极高的设置deadlock_timeout,这也可以解释为什么您甚至有机会手动干预。默认值为 1 秒,手册建议

默认值为一秒 ( 1s),这可能是您在实践中想要的最小值。在负载很重的服务器上,您可能想要提升它。理想情况下,该设置应超过您的典型事务时间,以提高在服务员决定检查死锁之前释放锁的几率。只有超级用户才能更改此设置。

我不希望您的典型交易超过10 分钟。如果您有长时间运行的查询,请尝试 2​​0 秒。

此处记录了防止死锁的最佳方法:

防止死锁的最佳方法通常是通过确定所有使用数据库的应用程序以一致的顺序获取多个对象的锁来避免它们。

如果您因此这样做,则不会出现死锁。