|
|
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
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 глянуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 15:44:32 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
V&N qwwq, там три ведра create/drop temp table внутри одной транзакции. И? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 15:45:44 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
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;$$; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 16:20:34 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
V&N, ага, я задал вопрос, потом посмотрел логи, и понял, что одних времянок хватает, чтобы размера "таблицы" блокировок не хватало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 16:30:07 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
ps где-то в RTFM было битым текстом, что при большом кол-ве партиций надо дефолт приподнять. потому и спросил про партиции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 16:31:45 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
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"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 16:42:26 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Думаю тут речь как раз о табличных блокировках и параметр `max_locks_per_transaction` устанавливает такие блокировки. Что касается ошибки — то тут все нормально. Суть проблема в нехватке памяти, причина же в маленьком значении параметра и они об этом говорят в подсказке. В подсказках много интересного, поэтому читать сообщения об ошибках надо целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 17:06:43 |
|
||
|
Crash сервера, found orphan temp table и out of shared memory.
|
|||
|---|---|---|---|
|
#18+
vyegorovДумаю тут речь как раз о табличных блокировках и параметр `max_locks_per_transaction` устанавливает такие блокировки. В документации речь идет о блокировках любых объектов. И предполагается что большинство из них это AccessShareLock таблиц как я понимаю. Но по идее то ExclusiveLock'ов row'ов должно быть не меньше точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2014, 17:24:38 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38769281&tid=1998447]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
487ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 834ms |

| 0 / 0 |
