9.3 9.4 9.5 9.6 10 11 12
阿里云PostgreSQL 问题报告 纠错本页面

18.12. 锁管理

deadlock_timeout (integer)

以毫秒计的时间,用于设置在检查是否存在死锁条件之前等待的时间。 检查是否存在死锁条件是一个昂贵的过程,因此服务器不会在每次等待锁的时候都运行这个过程。 我们乐观地假设在生产应用中的死锁是不常出现的, 因此我们在开始询问是否可以解锁之前只等待一个相对较短的时间。 增加这个值就减少了浪费在无用的死锁检查上的时间,但是减慢了报告真正死锁错误的速度。 缺省是1秒(1s),这可能是你能够耐心等待的最短时间。在一个重负载的服务器上, 你可能需要增大它。这个值的典型设置应该超过你的事务持续时间, 这样就可以减少在锁释放之前就开始死锁检查的问题。 只有超级用户可以改变这个设置。

log_lock_waits被设置时, 此参数也决定在发出有关锁等待的日志信息之前的等待时间长度。 如果您正在尝试调查锁定延迟, 你可能想设置一个小于正常deadlock_timeout的值。

max_locks_per_transaction (integer)

共享的锁表的大小是以假设任意时刻最多只有 max_locks_per_transaction * (max_connections + max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。 这个参数控制分配给每个事务的锁定对象平均数。 单独事务只要所有事务锁适合在锁表中都可以锁定多个对象。 这不是锁定行的数目, 该值是无限的。缺省值64,已经经历史证明是足够的了, 不过如果你有在一个事务里接触很多不同的表的查询,那么你就可能需要提高这个数值。 比如带有很多孩子的父表查询。 这个值只能在服务器启动的时候设置。

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

max_pred_locks_per_transaction (integer)

共享谓词锁表跟踪锁定在 max_pred_locks_per_transaction * (max_connections + max_prepared_transactions)对象上(例如,表); 因此,只是许多不同的对象更可以在任何一个时间锁定。 此参数控制对象锁定分配给每个事务的平均数; 个别事务可以锁定多个对象, 只要所有事务的锁适合在锁表中。这不是 可以锁定的行数;该值是无限的。 在默认情况下,64对测试已经足够了, 如果在可串行化事务中你有接触许多不同表的客户,那么您可能需要增大这个值。 此参数只能在服务器启动时设置。

<
/BODY >