• Как безопасно применить Vacuum на террабайтую БД Postgress?

    Melkij
    @Melkij
    PostgreSQL DBA
    vacuum - запустить vacuum. В нём нет ничего страшного, если вы не отстрелили себе ноги, то база сама его запускает согласно настройкам.

    vacuum full - история очень сильно отдельная, т.к. это ни разу не vacuum.
    Места под vacuum full надо под копию таблицы с индексами и на запись этой копии в WAL. То есть теоретически до двукратного объёма.
    Поскольку для рабочей базы возможность уйти на сколько-то часов штука неинтересная - vacuum full по большим таблицам не делают.
    Есть pg_repack делающий с помощью триггера и чёрной магии копию таблицы (место всё так же нужно свободное), после накатывает изменения в основной таблице и заменяет основную на свежую копию. В целом - то что делает vacuum full, но без тяжёлой блокировки таблицы.
    Есть pgcompacttable, идущий другим путём. postgresql пытается новые строки размещать в начале таблицы, поэтому фиктивные обновления строк в конце таблицы скорей всего переместятся в начало, а пустые страницы в конце может срезать обычный vacuum. Плюс перестроить индексы (правда не все). Обновление inplace, запас места под копию не требуется. Полную блокировку таблицы конечно тоже не берём.
    Ответ написан
    Комментировать
  • Как безопасно применить Vacuum на террабайтую БД Postgress?

    orlov0562
    @orlov0562
    I'm cool!
    https://www.postgresql.org/docs/current/sql-vacuum.html
    Selects "full" vacuum, which can reclaim more space, but takes much longer and exclusively locks the table. This method also requires extra disk space, since it writes a new copy of the table and doesn't release the old copy until the operation is complete. Usually this should only be used when a significant amount of space needs to be reclaimed from within the table.


    т.е. надо мимнимум +1 Тб

    чтобы сделать все безопасно, тем более на проде, надо отзеркалить базу на другой винт и затем провести чистку там, после чего синхронизировать накопившееся изменения с основной копией, и в конце переключить прод на новую бд
    Ответ написан
    2 комментария
  • Как безопасно применить Vacuum на террабайтую БД Postgress?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Для начала найдите системного архитектора или DBA и дайте ему в глаз. Он поймёт за что.
    Ответ написан
    Комментировать