选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

19.12. 锁管理 #

deadlock_timeout (integer) #

指定在检查是否发生死锁之前等待锁的毫秒数。检查死锁相对昂贵,因此服务器不会每次等待锁时都运行它。 我们乐观地假设在生产应用程序中死锁并不常见,所以在检查死锁之前只是等待一段时间。 增加此值会减少在不必要的死锁检查中浪费的时间,但会减慢实际死锁错误的报告速度。 默认值为一秒(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 已经在测试中被证明通常是足够的,但是如果你有会在单个可串行化事务中访问许多不同表的客户端,则可能需要提高这个值。这个参数只能在服务器启动时设置。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。