锁管理

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 18. 服务器配置 | 下一页

# 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对测试已经足够了， 如果在可串行化事务中你有接触许多不同表的客户，那么您可能需要增大这个值。 此参数只能在服务器启动时设置。

上一页 | 起始页 | 下一页
客户端连接缺省 | 上一级 | 版本和平台兼容性