# 20.12.锁管理

死锁超时(整数)

这是在检查是否存在死锁条件之前等待锁的时间量。死锁检查的成本相对较高,因此服务器不会在每次等待锁定时都运行死锁检查。我们乐观地假设死锁在生产应用程序中并不常见,只需等待一段时间,然后再检查死锁。增加此值可以减少在不必要的死锁检查中浪费的时间,但会降低报告实际死锁错误的速度。如果指定此值时没有单位,则以毫秒为单位。默认值为1秒(1s),这可能是你在实践中想要的最小值。在一个负载很重的服务器上,你可能想要提升它。理想情况下,设置应该超过典型的事务时间,以便提高在服务员决定检查死锁之前释放锁的几率。只有超级用户才能更改此设置。

什么时候日志_锁_等待设置时,此参数还确定在发出有关锁定等待的日志消息之前等待的时间。如果您试图调查锁定延迟,您可能希望设置一个比正常值更短的值死锁超时.

每个事务的最大锁数(整数)

共享锁表跟踪上的锁每个事务的最大锁数 *(最大值_连接 + 最大值_准备好_交易)对象(例如,表格);因此,一次最多只能锁定这么多不同的对象。此参数控制为每个事务分配的对象锁的平均数量;单个事务可以锁定更多的对象,只要所有事务的锁都在锁表中。这是可以锁定的行数;这个价值是无限的。默认值64在历史上已被证明是足够的,但如果在一个事务中有涉及多个不同表的查询(例如,查询具有多个子表的父表),则可能需要提高该值。此参数只能在服务器启动时设置。

运行备用服务器时,必须将此参数设置为与主服务器上相同或更高的值。否则,备用服务器中将不允许查询。

每个事务的最大预锁次数 (整数)

共享谓词锁表跟踪上的锁每个事务的最大预锁次数 * (最大值_连接 + 最大值_准备好_交易)对象(例如,表格);因此,一次最多只能锁定这么多不同的对象。此参数控制为每个事务分配的对象锁的平均数量;单个事务可以锁定更多的对象,只要所有事务的锁都在锁表中。这是可以锁定的行数;这个价值是无限的。默认值64在测试中通常已经足够了,但是如果您的客户端在一个可序列化事务中接触多个不同的表,则可能需要提高该值。此参数只能在服务器启动时设置。

max_pred_锁定每个关系 (整数)

它控制在锁升级为覆盖整个关系之前,单个关系的多少页或元组可以被谓词锁定。大于或等于零的值表示绝对极限,而负值表示绝对极限最大值_pred_锁_每_交易除以此设置的绝对值。默认值为-2,它保留了PostgreSQL早期版本的行为。此参数只能在postgresql。形态文件或在服务器命令行上。

每页最大预锁次数 (整数)

这控制在锁定提升为覆盖整个页面之前,可以谓词锁定单个页面上的多少行。默认值为2.此参数只能在postgresql。形态文件或在服务器命令行上。