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