企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 18.12\. 锁管理 `deadlock_timeout` (`integer`) 以毫秒计的时间,用于设置在检查是否存在死锁条件之前等待的时间。 检查是否存在死锁条件是一个昂贵的过程,因此服务器不会在每次等待锁的时候都运行这个过程。 我们乐观地假设在生产应用中的死锁是不常出现的, 因此我们在开始询问是否可以解锁之前只等待一个相对较短的时间。 增加这个值就减少了浪费在无用的死锁检查上的时间,但是减慢了报告真正死锁错误的速度。 缺省是1秒(`1s`),这可能是你能够耐心等待的最短时间。在一个重负载的服务器上, 你可能需要增大它。这个值的典型设置应该超过你的事务持续时间, 这样就可以减少在锁释放之前就开始死锁检查的问题。 只有超级用户可以改变这个设置。 当[log_lock_waits](#calibre_link-1754)被设置时, 此参数也决定在发出有关锁等待的日志信息之前的等待时间长度。 如果您正在尝试调查锁定延迟, 你可能想设置一个小于正常`deadlock_timeout`的值。 `max_locks_per_transaction` (`integer`) 共享的锁表的大小是以假设任意时刻最多只有 `max_locks_per_transaction` * ([max_connections](#calibre_link-441) + [max_prepared_transactions](#calibre_link-1380)) 个独立的对象需要被锁住为基础进行计算的。 这个参数控制分配给每个事务的锁定对象平均数。 单独事务只要所有事务锁适合在锁表中都可以锁定多个对象。 这_不是_锁定行的数目, 该值是无限的。缺省值64,已经经历史证明是足够的了, 不过如果你有在一个事务里接触很多不同的表的查询,那么你就可能需要提高这个数值。 比如带有很多孩子的父表查询。 这个值只能在服务器启动的时候设置。 当运行备用服务器时,你必须将此参数设置为比主服务器上相同或更高的值。否则, 不允许在备用服务器进行查询。 `max_pred_locks_per_transaction` (`integer`) 共享谓词锁表跟踪锁定在 `max_pred_locks_per_transaction` * ([max_connections](#calibre_link-441) + [max_prepared_transactions](#calibre_link-1380))对象上(例如,表); 因此,只是许多不同的对象更可以在任何一个时间锁定。 此参数控制对象锁定分配给每个事务的平均数; 个别事务可以锁定多个对象, 只要所有事务的锁适合在锁表中。这_不是_ 可以锁定的行数;该值是无限的。 在默认情况下,64对测试已经足够了, 如果在可串行化事务中你有接触许多不同表的客户,那么您可能需要增大这个值。 此参数只能在服务器启动时设置。