Re: ERROR: Memory exhausted in AllocSetAlloc(188)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: ERROR: Memory exhausted in AllocSetAlloc(188)
Дата
Msg-id 11909.1053550994@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: ERROR: Memory exhausted in AllocSetAlloc(188)  ("Jim C. Nasby" <jim@nasby.net>)
Ответы Re: ERROR: Memory exhausted in AllocSetAlloc(188)  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-general
"Jim C. Nasby" <jim@nasby.net> writes:
> On Wed, May 21, 2003 at 04:39:18PM -0400, Tom Lane wrote:
>> Each pending deferred-trigger action takes about 40 bytes + palloc
>> overhead, probably 48 bytes altogether ... 48 * 35M comes to 1.68G, so
>> that's exactly where your problem is.  I'd suggest trying to commit the
>> changes in smaller batches ...

> Ugh... would two triggers double that? Where can I get more info on
> what's happening under the covers here, especially on what a deferred
> trigger is?

A deferred trigger is an AFTER trigger.  If you can do your work in
BEFORE triggers, you should.

Two triggers firing on the same row action (insert/update/delete) do not
double the memory --- there's one trigger queue entry per action.  It
looks like it costs about 8 more bytes for each additional deferred
trigger that needs to be fired on the same row action.

Beyond that, read the code --- it's in backend/commands/trigger.c.

            regards, tom lane

В списке pgsql-general по дате отправления:

Предыдущее
От: "Jim C. Nasby"
Дата:
Сообщение: Re: PostgreSQL Performance on OpenBSD
Следующее
От: Bruno Wolff III
Дата:
Сообщение: Re: PRIMARY KEYS