powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Crash сервера, found orphan temp table и out of shared memory.
8 сообщений из 33, страница 2 из 2
Crash сервера, found orphan temp table и out of shared memory.
    #38769281
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukNitro_Junkieпропущено...


2014-10-07 12:32:10 FET WARNING: out of shared memory
2014-10-07 12:32:10 FET ERROR: out of shared memory
2014-10-07 12:32:10 FET HINT: You might need to increase max_locks_per_transaction.
2014-10-07 12:32:10 FET STATEMENT: CREATE TEMPORARY TABLE t_0 (p0 integer,k0 integer,PRIMARY KEY (k0))

так оно же вам русским английским языком пишет
"2014-10-07 12:32:10 FET HINT: You might need to increase max_locks_per_transaction."
ну вот и увеличьте раза в 4 относительно default
(толео для этого рестарт базы нужен)

Попробуем, но я логику не совсем понимаю.

Когда количество локов превышает общую таблицу локов, кидается "out of shared memory"? Можно это как-то диагностировать? Что именно проблема в локах? И достаточно для этого pg_locks глянуть?
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769283
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&N qwwq, там три ведра create/drop temp table внутри одной транзакции.

И?
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769330
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
Nitro_Junkie, что не понятного, max_locks_per_transaction - влияет на количество заблокированных объектов.
drop/truncte ... порождает блокировку.

поексперементируйте с параметром max_locks_per_transaction.
do $$
declare
i int;
begin
raise warning 'max_locks_per_transaction %', current_setting('max_locks_per_transaction');
i := 0;
begin
loop
execute 'create temp table if not exists xx'||i||'(x1 int)';
execute 'drop table if exists xx'||i;
exit when i >= 10000;
i:=i+1;
end loop;
exception when others then
raise exception 'sqlerrm: %, i := %', sqlerrm, i;
end;
raise warning 'i := %', i;
end;$$;
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769353
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&N,
ага, я задал вопрос, потом посмотрел логи, и понял, что одних времянок хватает, чтобы размера "таблицы" блокировок не хватало.
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769357
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ps
где-то в RTFM было битым текстом, что при большом кол-ве партиций надо дефолт приподнять.
потому и спросил про партиции.
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769378
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V&N Nitro_Junkie, что не понятного, max_locks_per_transaction - влияет на количество заблокированных объектов.
drop/truncte ... порождает блокировку.

поексперементируйте с параметром max_locks_per_transaction.
do $$
declare
i int;
begin
raise warning 'max_locks_per_transaction %', current_setting('max_locks_per_transaction');
i := 0;
begin
loop
execute 'create temp table if not exists xx'||i||'(x1 int)';
execute 'drop table if exists xx'||i;
exit when i >= 10000;
i:=i+1;
end loop;
exception when others then
raise exception 'sqlerrm: %, i := %', sqlerrm, i;
end;
raise warning 'i := %', i;
end;$$;

Thx, та же мысль была про блокировки с времянками.

Кстати, еще такой вопрос на каком то форуме Tom Lane предполагал (но это была во времена версий 7.4/8.0) что в худшем случае max_locks_per_transaction должно быть равно кол-во таблиц \ max_connections. Но ведь при update, в транзакции exclusive блокировка вешается на запись (я так понимаю в версионников, вообще не принято эскалировать блокировку на всю таблицу), а при нагруженной записи именно они могут составлять большую часть блокировок и соответственно при определении max_locks_per_transaction ориентироваться надо на эти блокировки?

И второй вопрос, разве она не должна какую-то другую ошибку кидать? Типа table of locks exceeded? Так и должно быть что кидается "общая" ошибка "out of shared memory"?
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769409
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_Junkie,

Думаю тут речь как раз о табличных блокировках и параметр `max_locks_per_transaction` устанавливает такие блокировки.

Что касается ошибки — то тут все нормально. Суть проблема в нехватке памяти, причина же в маленьком значении параметра и они об этом говорят в подсказке. В подсказках много интересного, поэтому читать сообщения об ошибках надо целиком.
...
Рейтинг: 0 / 0
Crash сервера, found orphan temp table и out of shared memory.
    #38769439
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovДумаю тут речь как раз о табличных блокировках и параметр `max_locks_per_transaction` устанавливает такие блокировки.

В документации речь идет о блокировках любых объектов. И предполагается что большинство из них это AccessShareLock таблиц как я понимаю. Но по идее то ExclusiveLock'ов row'ов должно быть не меньше точно.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Crash сервера, found orphan temp table и out of shared memory.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]