Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

19.12. 锁管理器 #

deadlock_timeout (整数) #

这是在检查是否存在死锁条件之前在锁上等待的时间量。死锁检查相对耗时,因此服务器不会在每次等待锁时运行它。我们乐观地假设死锁在生产应用程序中并不常见,只是在检查死锁之前在锁上等待一段时间。增加此值可以减少因不必要的死锁检查而浪费的时间量,但也减慢对实际死锁错误的报告速度。如果未指定单位,则此值为毫秒。默认值为一秒(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 文件中或服务器命令行中设置此参数。