17.11. 锁管理

deadlock_timeout (integer)

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

max_locks_per_transaction (integer)

共享的锁表的大小是以假设任意时刻最多只有 max_locks_per_transaction * (max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。 (所以,这个参数的名字可能有些让人糊涂:这不是单个事务可以使用的锁数目的硬限制,而是一个平均值。) 缺省值 64, 已经经历史证明是足够的了,不过如果你的客户可能在一个事务里面修改很多不同的表, 那么你就可能需要提高这个数值。这个选项只能在服务器启动的时候设置。

增大这个参数可能导致 PostgreSQL 要求更多的 System V 共享内存,可能超过你的操作系统的缺省配置。必要时,参阅 Section 16.4.1 获取如何调节这些参数的信息。