Обсуждение: What to do after an "ERROR: out of memory"
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
"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