Обсуждение: What to do after an "ERROR: out of memory"

Поиск
Список
Период
Сортировка

What to do after an "ERROR: out of memory"

От
"John Cheng"
Дата:
We were updating a large set of data (executing a stored procedure
against a large set of data in one statement/transaction) while
autovacuum was running.

The resulting message looked like:

2008-07-28 21:18:08 CDT CONTEXT: automatic vacuum of table
"databasename._lms.sl_log_2" TopMemoryContext: 154528 total in 18
blocks; 19104 free (62 chunks); 135424 used
  ....
2008-07-28 21:28:53 CDT database_other ERROR: out of memory
2008-07-28 21:48:13 CDT ERROR:
canceling autovacuum task
  ...

It looked like the update transaction/statement was cancelled, and the
autovacuum tasks running at the time were also cancelled.

How does Postgres handle out of memory errors, is it simply cancelling
these tasks as if the transactions have been rolled back? Is there
anything that needs to be done to make sure the data in the database
is not corrupted?


--
- John L Cheng

Re: What to do after an "ERROR: out of memory"

От
Tom Lane
Дата:
"John Cheng" <chonger.cheng@gmail.com> writes:
> We were updating a large set of data (executing a stored procedure
> against a large set of data in one statement/transaction) while
> autovacuum was running.

> The resulting message looked like:

> 2008-07-28 21:18:08 CDT CONTEXT: automatic vacuum of table
> "databasename._lms.sl_log_2" TopMemoryContext: 154528 total in 18
> blocks; 19104 free (62 chunks); 135424 used
>   ....
> 2008-07-28 21:28:53 CDT database_other ERROR: out of memory
> 2008-07-28 21:48:13 CDT ERROR:
> canceling autovacuum task
>   ...

Given the time delays there, I don't think the out-of-memory in the
update had anything to do with the autovacuum cancel.  Evidently
something sent the autovac process a SIGINT, but it wasn't as a result
of the memory issue.  Perhaps someone just mis-aimed a pg_cancel_backend
call?

            regards, tom lane