Saya telah melakukan semacam menjatuhkan skema intensif dan membuat lebih dari satu server PostgreSQL, tetapi sekarang mengeluh ..:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Tetapi masalahnya tetap ada jika PostgreSQL baru saja dimulai kembali service postgresql restart
, saya kira max_locks_per_transaction tidak akan menyetem apa-apa.
Saya agak terasing karena daftar pemecahan masalah untuk kesalahan ini tidak berfungsi untuk saya.
INFO LEBIH LANJUT 1409291350: Beberapa detail hilang tetapi saya tetap mempertahankan hasil inti 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
Dan:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
postgresql
schema
memory
48347
sumber
sumber
SELECT version()
? Masalah yang menarik ...max_locks_per_transaction = 64 # min 10
di /etc/postgresql/9.3/main/postgresql.conf sejauh ini.Jawaban:
Komentar Anda tentang menjatuhkan intensif dan membuat dan pemberitahuan yang Anda terima tentang peningkatan petunjuk max_locks_per_transaction bahwa Anda menjatuhkan dan membuat banyak objek dalam transaksi yang sama . Masing-masing menghasilkan kunci, yang masing-masing membutuhkan sejumlah kecil memori bersama. Karena itu, max_locks_per_transaction membatasi jumlah kunci yang dapat Anda pegang dalam suatu transaksi (untuk mencegah satu transaksi menggunakan semua memori bersama).
Anda dapat meningkatkan batas itu sedikit (saya akan merekomendasikan untuk tidak menetapkannya besar secara sewenang-wenang atau Anda akan lari ke situasi terpisah yang benar-benar kehabisan total memori bersama) atau melakukan tetes Anda dan membuat baik dalam kumpulan transaksi atau sebagai satu tetes / buat per transaksi.
Sunting: Rupanya saya salah tentang cara kerja max_locks_per_transaction. Dari dokumentasi, jumlah kunci yang tersedia adalah max_locks_per_transaction * (max_connections + max_prepared_transactions) - setiap transaksi dapat menampung lebih dari max_locks_per_transaction, selama jumlah kunci yang disimpan di mana-mana kurang dari nilai total ini.
sumber
DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public
, ini adalah kalimat-kalimat yang melemparkan PERINGATAN, KESALAHAN dan PETUNJUK.