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
文件或服务器命令行中设置。
如果您在本文档中发现任何不正确、与您在使用特定功能时的实际体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。