Пылесос быстрее? - PullRequest
       4

Пылесос быстрее?

0 голосов
/ 14 апреля 2020

Я заметил, что VACUUM FULL может занять очень много времени на Postgres.

Есть ли способ ускорить процесс? например, указав, что БД находится в режиме обслуживания и, следовательно, не нуждается в доступности для любого другого запроса во время очистки?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Вы можете использовать pg_prewarm для загрузки таблицы в оперативную память перед запуском на ней VACUUM (FULL).

Кроме того, обратите внимание, что maintenance_work_mem настолько большой, насколько это возможно; это ускорит создание индексов.

Обе эти вещи помогут, но нет волшебников c, чтобы сделать это действительно быстро.

Вместо этого вы можете попробовать что-то вроде:

BEGIN;
LOCK oldtab IN SHARE MODE;  -- blocks modifications
CREATE TABLE newtab (LIKE oldtab INCLUDING ALL);
INSERT INTO newtab SELECT * FROM oldtab;
/* create indexes and constraints as appropriate */
DROP TABLE oldtab;
ALTER TABLE newtab RENAME TO oldtab;
COMMIT;

Это блокирует SELECT операторов только на короткое время.

1 голос
/ 14 апреля 2020

Это очень общий вопрос, ответ будет таким же:

Выполнить VACUUM FULL VERBOSE [table] показывает, почему медленно

Самый важный параметр для вакуума - maintenance_work_mem попытаться увеличить его.

Список параметров памяти: https://www.postgresql.org/docs/12/runtime-config-resource.html

Глубина вакуума:

Также вы можете попробовать https://reorg.github.io/pg_repack/ - вакуум без исключительно замков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...