20.12 锁管理#
deadlock_timeout
(整数
) #这是在检查是否存在死锁条件之前等待锁的时间量。死锁检查相对昂贵,因此服务器不会在每次等待锁时都运行它。我们乐观地假设死锁在生产应用程序中并不常见,并且在检查死锁之前只需等待锁一段时间。增加此值会减少浪费在不必要的死锁检查上的时间量,但会减慢对实际死锁错误的报告速度。如果未指定单位,则此值将以毫秒为单位。默认值为一秒 (
1s
),这可能是您在实践中想要的最小值。在负载很重的服务器上,您可能需要提高它。理想情况下,设置应超过您的典型事务时间,以提高在等待者决定检查死锁之前释放锁的几率。只有超级用户和具有适当SET
权限的用户才能更改此设置。当 log_lock_waits 设置时,此参数还确定在发出有关锁等待的日志消息之前等待的时间量。如果您尝试调查锁定延迟,则可能需要设置比正常情况下更短的
deadlock_timeout
。max_locks_per_transaction
(整数
) #共享锁表有空间用于每个服务器进程或已准备事务的
max_locks_per_transaction
对象(例如,表);因此,一次最多只能锁定这么多不同的对象。此参数限制每个事务使用的对象锁的平均数量;只要所有事务的锁都适合锁表,各个事务就可以锁定更多对象。这 不是 可以锁定的行数;该值是无限的。默认值 64 在历史上已被证明是足够的,但是如果您有在单个事务中触及许多不同表的查询(例如,查询具有许多子表的父表),则可能需要提高此值。此参数只能在服务器启动时设置。在运行备用服务器时,您必须将此参数设置为与主服务器上相同或更高的值。否则,备用服务器中将不允许查询。
max_pred_locks_per_transaction
(整数
) #共享谓词锁表为每个服务器进程或已准备好的事务提供
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
文件或服务器命令行中设置。