19.12. 锁管理 #
deadlock_timeout(integer) #指定在检查是否发生死锁之前等待锁的时间。检查死锁相对昂贵,因此服务器不会每次等待锁时都运行它。我们乐观地假设在生产应用程序中死锁并不常见,所以在检查死锁之前只是等待一段时间。增加此值会减少在不必要的死锁检查中浪费的时间,但会减慢实际死锁错误的报告速度。如果未指定单位,则将其视为毫秒。默认值为一秒(
1s),这可能是你在实践中想要的最小值。在负载较重的服务器上,你可能希望提高它。理想情况下,设置应超过你的典型事务时间,以提高在等待者决定检查死锁之前释放锁的几率。只有超级用户和具有适当SET权限的用户才能更改此设置。当 log_lock_waits 被设置时,这个参数也决定发出关于锁等待的日志之前等待的时间量。如果你想调查锁延迟,你可能希望设置一个比正常的
deadlock_timeout小的值。max_locks_per_transaction(integer) #共享锁表为每个服务器进程或预备事务预留可容纳
max_locks_per_transaction个对象(例如表)的空间;因此,在任何时刻可被锁住的不同对象数都不能超过总容量。这个参数限制每个事务使用的对象锁的平均数量;只要所有事务的锁能放入锁表中,单个事务就可以锁住更多对象。这不是能被锁住的行数,那个值是没有限制的。默认值 128 已经被历史证明是足够的,但是如果你有需要在一个事务中使用很多不同表的查询(例如查询一个有很多子表的父表),你可能需要提高这个值。这个参数只能在服务器启动时设置。运行备库时,必须将此参数设置为大于或等于主库上的值。否则,备库上将不允许查询。
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文件中或者服务器命令行上设置。