Обсуждение: VACUUM to prevent wraparound
Одна БД (9.5) пришла в положение: автовакуум постоянно запускает запрос: autovacuum: VACUUM public.orders (to prevent wraparound) и тот всегда висит "to prevent wraparound" любые попытки ALTER TABLE зависают навсегда. Попытки завершаются успехом при остановке pg_cancel_backend этого "to prevent wraparound". В доке пишут подымите мол autovacuum_freeze_max_age, но я что-то не пойму как его правильно поднять. psql psql (9.5.11) Введите "help", чтобы получить справку. unera=# show autovacuum_freeze_max_age; autovacuum_freeze_max_age --------------------------- 200000000 (1 строка) unera=# ALTER SYSTEM SET autovacuum_freeze_max_age = 1000000000; ALTER SYSTEM unera=# show autovacuum_freeze_max_age; autovacuum_freeze_max_age --------------------------- 200000000 (1 строка) unera=# SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 строка) unera=# show autovacuum_freeze_max_age; autovacuum_freeze_max_age --------------------------- 200000000 (1 строка) unera=# show autovacuum; autovacuum ------------ off (1 строка) Остановка autovacuum тоже не помогла. Как только киляешь этот запрос - он сразу запускает новый. И новый в этом состоянии `prevent` и все. Дальше с БД сделать ничего нельзя. Не хочется ее выключать. Можно что-то сделать без простоя? -- . ''`. Dmitry E. Oboukhov <unera@debian.org> : :’ : `. `~’ GPG key: 4096R/08EEA756 2014-08-30 `- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756
Вложения
Привет Если вы будете мешать работать antiwraparound автовакууму - у вас через некоторое обозримое время встанет вообще вся базаи потребует плотного общения с DBA вроде вот такого: > ERROR: database is not accepting commands to avoid wraparound data loss in database "mydb" > HINT: Stop the postmaster and vacuum that database in single-user mode. https://www.postgresql.org/docs/current/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND Потому что иначе при wraparound сделать больше ничего нельзя. Ждите когда wraparound завершится либо выполните vacuum freeze самостоятельно. И включите обратно autovacuum. Он выполняет много полезной работы. Если вы думаете что он мешает - значит у вас недостаточноагрессивно настроен автовакуум. С уважением, Сергей
> Привет > Если вы будете мешать работать antiwraparound автовакууму - у вас через некоторое обозримое время встанет вообще вся базаи потребует плотного общения с DBA вроде вот такого: >> ERROR: database is not accepting commands to avoid wraparound data loss in database "mydb" >> HINT: Stop the postmaster and vacuum that database in single-user mode. > https://www.postgresql.org/docs/current/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND в общем приблизительно я разобрался что произошло. видимо бага которую закрывали в 9.5.6-1 и о которую мы в свое время нос разбили еще таки есть. я запустил руками VACUUM ANALYZE VERBOSE orders; затем стопнул prevent-запрос и увидел что VACUUM не может пройти поскольку один из индексов фелится vacuum ERROR: failed to re-find parent key in index "orders_from_fullname_idx" for deletion target page 163383 я дропнул и пересоздал этот индекс и далее снова пустил VACUUM ANALYZE VERBOSE orders; этот VACUUM еще идет, но судя по всему минут через 15 завершится. а дальше будем смотреть, надеюсь что и prevent исчезнет > Потому что иначе при wraparound сделать больше ничего нельзя. > Ждите когда wraparound завершится либо выполните vacuum freeze самостоятельно. > И включите обратно autovacuum. Он выполняет много полезной работы. Если вы думаете что он мешает - значит у вас недостаточноагрессивно настроен автовакуум. да это понятно. Я его выключил в рамках попытки разобраться что было. > С уважением, Сергей -- . ''`. Dmitry E. Oboukhov <unera@debian.org> : :’ : `. `~’ GPG key: 4096R/08EEA756 2014-08-30 `- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756
Вложения
Да, действительно, проблема была именно в corrupt индексе. Веороятно проблема фикса в 9.5.6 так и не [до конца] решена до сих пор :( ээх On 16:01 Mon 16 Apr , Dmitry E. Oboukhov wrote: >> Привет >> Если вы будете мешать работать antiwraparound автовакууму - у вас через некоторое обозримое время встанет вообще вся базаи потребует плотного общения с DBA вроде вот такого: >>> ERROR: database is not accepting commands to avoid wraparound data loss in database "mydb" >>> HINT: Stop the postmaster and vacuum that database in single-user mode. >> https://www.postgresql.org/docs/current/static/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND > в общем приблизительно я разобрался что произошло. > видимо бага которую закрывали в 9.5.6-1 и о которую мы в свое время > нос разбили еще таки есть. > я запустил руками VACUUM ANALYZE VERBOSE orders; > затем стопнул prevent-запрос и увидел что VACUUM не может пройти > поскольку один из индексов фелится vacuum > ERROR: failed to re-find parent key in index "orders_from_fullname_idx" for deletion target page 163383 > я дропнул и пересоздал этот индекс и далее снова пустил > VACUUM ANALYZE VERBOSE orders; > этот VACUUM еще идет, но судя по всему минут через 15 завершится. > а дальше будем смотреть, надеюсь что и prevent исчезнет >> Потому что иначе при wraparound сделать больше ничего нельзя. >> Ждите когда wraparound завершится либо выполните vacuum freeze самостоятельно. >> И включите обратно autovacuum. Он выполняет много полезной работы. Если вы думаете что он мешает - значит у вас недостаточноагрессивно настроен автовакуум. > да это понятно. Я его выключил в рамках попытки разобраться что было. >> С уважением, Сергей > -- > . ''`. Dmitry E. Oboukhov <unera@debian.org> > : :’ : > `. `~’ GPG key: 4096R/08EEA756 2014-08-30 > `- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756 -- . ''`. Dmitry E. Oboukhov <unera@debian.org> : :’ : `. `~’ GPG key: 4096R/08EEA756 2014-08-30 `- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756