web-dev-qa-db-ja.com

PostgreSQLは共有メモリについて不平を言っていますが、共有メモリは問題ないようです

私は一種の集中的なスキーマの削除とPostgreSQLサーバー上での作成を実行してきましたが、今は不満があります。

WARNING:  out of shared memory
ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.

しかし、PostgreSQLをservice postgresql restart、max_locks_per_transactionは何もチューニングしないと思います。

このエラーのトラブルシューティングリストが機能しないため、少し離れています。

MORE INFO 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

そして:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty
13
48347

集中的なドロップと作成に関するコメントと、max_locks_per_transactionの増加について受け取った通知で、多くのオブジェクトをドロップして作成するというヒント同じトランザクション内。これらはそれぞれロックを引き起こし、ロックには少量の共有メモリが必要です。このため、max_locks_per_transactionは、トランザクション内で保持できるロックの数を制限します(1つのトランザクションがすべての共有メモリを使用しないようにするため)。

その制限を少し増やすか(任意に大きく設定しないことをお勧めします。そうしないと、実際に共有メモリの合計が不足する別の状況に陥ります)、ドロップを実行して、トランザクションのバッチで、または1つのドロップとして作成します。 /トランザクションごとに作成します。

編集:どうやらmax_locks_per_transactionがどのように機能するかについて私は間違っていました。ドキュメントから、使用可能なロックの合計数はmax_locks_per_transaction *(max_connections + max_prepared_transactions)です。すべての場所で保持されているロックの数がこの合計値より少ない限り、1つのトランザクションでmax_locks_per_transactionより多く保持できます。

11
yieldsfalsehood