9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面

20.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文件中或者服务器命令行上设置。