2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不受支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.12. 锁管理 #

deadlock_timeout (integer) #

这是在检查是否存在死锁条件之前等待锁的时间量。死锁检查相对昂贵,因此服务器不会在每次等待锁时都运行它。我们乐观地假设死锁在生产应用程序中并不常见,并且只需等待一段时间再检查死锁。增加此值可减少在不必要的死锁检查中浪费的时间,但会减慢实际死锁错误的报告速度。如果指定此值时未带单位,则将其视为毫秒。默认值为一秒(1s),这可能是您在实践中想要的最小值。在负载很重的服务器上,您可能需要将其提高。理想情况下,设置应超过您的典型事务时间,以便提高锁在等待者决定检查死锁之前释放的可能性。只有超级用户和具有相应 SET 权限的用户才能更改此设置。

log_lock_waits 设置时,此参数还决定在发出有关锁等待的日志消息之前要等待的时间量。如果您尝试调查锁定延迟,则可能希望设置比正常情况更短的 deadlock_timeout

max_locks_per_transaction (integer) #

共享锁表为每个服务器进程或已准备的事务提供了 max_locks_per_transaction 个对象(例如,表)的空间;因此,任何时候最多只能锁定这么多不同的对象。此参数限制每个事务使用的对象锁的平均数量;只要所有事务的锁都适合锁表,各个事务就可以锁定更多对象。这不是可以锁定的行数;该值是无限的。默认值 64 在历史上已被证明足够,但如果您有查询在单个事务中涉及许多不同的表,例如具有许多子表的父表的查询,则可能需要增加此值。此参数只能在服务器启动时设置。

在运行备用服务器时,必须将此参数设置为与主服务器相同或更高的值。否则,备用服务器将不允许查询。

max_pred_locks_per_transaction (integer) #

共享谓词锁表为每个服务器进程或已准备的事务提供了 max_pred_locks_per_transaction 个对象(例如,表)的空间;因此,任何时候最多只能锁定这么多不同的对象。此参数限制每个事务使用的对象锁的平均数量;只要所有事务的锁都适合锁表,各个事务就可以锁定更多对象。这不是可以锁定的行数;该值是无限的。默认值 64 在历史上已被证明足够,但如果您有客户端在单个可序列化事务中涉及许多不同的表,则可能需要增加此值。此参数只能在服务器启动时设置。

max_pred_locks_per_relation (integer) #

这控制在将锁提升为覆盖整个关系之前,可以对单个关系的多少个页面或元组进行谓词锁定。大于或等于零的值表示绝对限制,而负值表示 max_pred_locks_per_transaction 除以该设置的绝对值。默认值为 -2,这保留了先前版本的 PostgreSQL 的行为。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

max_pred_locks_per_page (integer) #

这控制在将锁提升为覆盖整个页面之前,可以在单个页面上对多少行进行谓词锁定。默认值为 2。此参数只能在 postgresql.conf 文件或服务器命令行中设置。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表单 报告文档问题。