前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库PostrageSQL-锁管理

数据库PostrageSQL-锁管理

作者头像
cwl_java
发布2021-08-30 14:39:59
2800
发布2021-08-30 14:39:59
举报
文章被收录于专栏:cwl_Javacwl_Java

19.12. 锁管理

deadlock_timeout (integer) 这是进行死锁检测之前在一个锁上等待的总时间(以毫秒计)。死锁检测相对昂贵,因此服务器不会在每次等待锁时都运行这个它。我们乐观地假设在生产应用中死锁是不常出现的,并且只在开始检测死锁之前等待一会儿。增加这个值就减少了浪费在无用的死锁检测上的时间,但是减慢了报告真正死锁错误的速度。默认是 1 秒(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 已经在测试中被证明通常是足够的,但是如果你有需要在一个可序列化事务中使用很多不同表的查询(例如查询一个有很多子表的父表),你可能需要提高这个值。这个参数只能在服务器启动时设置。

max_pred_locks_per_relation (integer) 这个参数控制在谓词锁被提升为覆盖整个关系之前,该谓词锁能够在单个关系上锁住多少页面或元组。大于等于零的值表示一种绝对限制,而负值表示用max_pred_locks_per_transaction除以这个设置的绝对值。默认值为-2,它将保持以往版本的PostgreSQL中的行为。这个参数只能在postgresql.conf文件中或者服务器命令行上设置。

max_pred_locks_per_page (integer) 这个参数控制在谓词锁被提升为覆盖整个页面之前,该谓词锁能在单一页面上锁住多少行。默认值是2。这个参数只能在postgresql.conf文件中或者服务器命令行上设置。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 19.12. 锁管理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档