我们最近升级到PostgreSQL 9.1.6(8.3)。 我们的测试服务器表明max_pred_locks_per_transaction应至少高达设定为900(这是远远超出64推荐的设置)。
我们现在是在生产,我不得不增加这个参数很多次,因为我们的日志将开始填写:
ERROR: 53200: out of shared memory
HINT: You might need to increase max_pred_locks_per_transaction.
凭借600客户端连接设置(但从来没有越过100个客户一池系统):
max_pred_locks_per_transaction:我们去3000在大约一天跑了出去。 又到9000,在大约3天跑了出去。
我现在有它设置为30000,并因为这个数字是允许每个客户端连接分配平均,我现在有大约5 GB的共享内存的专用锁的空间!
我有设置相当高(24GB的时刻),其中超过40%的RAM人物的shared_buffers。 (我计划在下次重新启动调下来的RAM约25%)。
编辑:这调整被证明是一个坏主意。 我的数据库是它有很多沉重的查询,并致力于的shared_buffers大RAM具有半防止它窒息,因为它可以完全缓存较大的表。
平均而言,我看到某处大约5-10活动查询一次。 我们查询负载远远超过了我们的更新负荷。
有人关心告诉我,我怎么会追查到底是怎么回事错在这里? 有了这样一个小更新一套,我真的不明白,为什么我们正在耗尽锁经常的......它确实闻起来像泄漏给我。
任何人都知道如何检查,其中锁了? (例如,如何可能我读pg_locks对相对于内容这个问题)