Robiłem rodzaj intensywnego upuszczania i tworzenia schematów na serwerze PostgreSQL, ale teraz narzekam ...:
WARNING: out of shared memory
ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
Ale problem pozostaje, jeśli PostgreSQL zostanie ponownie uruchomiony service postgresql restart
, podejrzewam, że max_locks_per_transaction niczego nie dostroi.
Jestem trochę wyobcowany, ponieważ listy problemów dla tego błędu nie działają dla mnie.
WIĘCEJ INFORMACJI 1409291350: Brakuje niektórych szczegółów, ale zachowuję główny wynik 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
I:
$ 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
źródło
źródło
SELECT version()
? Ciekawy problem ...max_locks_per_transaction = 64 # min 10
w /etc/postgresql/9.3/main/postgresql.conf tak daleko.Odpowiedzi:
Twój komentarz na temat intensywnego upuszczania i tworzenia oraz otrzymane powiadomienie dotyczące zwiększania max_locks_per_transaction wskazują, że upuszczasz i tworzysz wiele obiektów w tej samej transakcji . Każda z nich powoduje blokadę, która wymaga niewielkiej ilości pamięci współdzielonej. Z tego powodu max_locks_per_transaction ogranicza liczbę blokad, które możesz zatrzymać w ramach transakcji (aby uniemożliwić jednej transakcji wykorzystanie całej pamięci współdzielonej).
Możesz albo nieco zwiększyć ten limit (odradzam ustawianie go dowolnie, albo wpadniesz w osobną sytuację, w której zabraknie całkowitej pamięci współdzielonej) lub będziesz robił zrzuty i tworzy albo partie transakcji, albo jako jedną kroplę / Utwórz na transakcję.
Edycja: Najwyraźniej myliłem się, jak działa max_locks_per_transaction. Z dokumentacji wynika, że całkowita liczba dostępnych blokad to max_locks_per_transaction * (max_connections + max_prepared_transactions) - każda transakcja może zawierać więcej niż max_locks_per_transaction, o ile liczba blokad przechowywanych wszędzie jest mniejsza niż ta całkowita wartość.
źródło
DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public
, że są to zdania rzucające OSTRZEŻENIE, BŁĄD i WSKAZÓWKA.