483*_*347 15 schema postgresql memory
我一直在执行一种密集的模式删除和通过 PostgreSQL 服务器创建,但现在抱怨..:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Run Code Online (Sandbox Code Playgroud)
但是如果 PostgreSQL 只是用 重新启动,问题仍然存在service postgresql restart
,我怀疑 max_locks_per_transaction 不会调整任何内容。
我有点疏远,因为此错误的故障排除列表对我不起作用。
更多信息 1409291350:缺少一些细节,但我保留了核心 SQL 结果。
postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
64-bit
Run Code Online (Sandbox Code Playgroud)
和:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
Run Code Online (Sandbox Code Playgroud)
yie*_*ood 12
您对密集删除和创建的评论以及您收到的有关增加 max_locks_per_transaction 的通知提示您在同一事务中删除和创建许多对象。每一个都会产生一个锁,每个都需要少量的共享内存。因此,max_locks_per_transaction 限制了您可以在一个事务中持有的锁的数量(以防止任何一个事务使用所有共享内存)。
您可以稍微增加该限制(我建议不要将其设置为任意大,否则您将遇到实际耗尽总共享内存的单独情况),或者进行删除并分批交易或一次性创建/创建每个事务。
编辑:显然我对 max_locks_per_transaction 的工作方式是错误的。从文档中可以看出,可用锁的总数为 max_locks_per_transaction * (max_connections + max_prepared_transactions) - 任何一个事务都可以持有超过 max_locks_per_transaction 的数量,只要各处持有的锁数量小于这个总数即可。