Подтвердить что ты не робот

Свободное пространство после массивных postgres delete

У меня есть таблица из 9 миллионов строк. Я понял, что большая его часть (около 90%) может быть освобождена. Какие действия необходимы после очистки? Вакуум, реиндекс и т.д.

Спасибо заранее.

4b9b3361

Ответ 1

Если вы хотите освободить место в файловой системе, вам может помочь VACUUM FULL или CLUSTER. После этого вы также захотите запустить ANALYZE, чтобы убедиться, что планировщик имеет самую последнюю статистику. Ваши таблицы будут полностью заблокированы во время этой процедуры (чтение и запись в этой таблице будет зависать), поэтому вы, вероятно, захотите отключить свое приложение в автономном режиме.

В PostgreSQL 8.2 и более ранних версиях VACUUM FULL, вероятно, лучший выбор.

В PostgreSQL 8.3 и 8.4 команда CLUSTER была значительно улучшена, поэтому VACUUM FULL не рекомендуется - она ​​медленная, и она раздувает ваши индексы. CLUSTER будет воссоздавать индексы с нуля и без раздувания. По моему опыту это обычно намного быстрее. CLUSTER дополнительно сортирует всю физическую таблицу с помощью индекса, поэтому вам нужно выбрать индекс. Если вы не знаете, какой из них будет работать, первичный ключ будет работать нормально.

В PostgreSQL 9.0 VACUUM FULL был изменен на работу как CLUSTER, поэтому оба они хороши.

Трудно делать прогнозы, но на правильно настроенном сервере с товарным оборудованием 9 миллионов строк не должны занимать больше 20 минут.

Ответ 2

Вы определенно хотите запустить VACUUM, чтобы освободить место для будущих вставок. Если вы хотите на самом деле восстановить это пространство на диске, сделав его доступным для ОС, вам нужно запустить VACUUM FULL. Имейте в виду, что VACUUM может работать одновременно, но VACUUM FULL требует исключительной блокировки на таблице.

Вы также захотите REINDEX, так как индексы останутся раздутыми даже после запуска VACUUM. Если возможно, гораздо более быстрый способ сделать это - удалить индекс и создать его с нуля.

Вы также захотите ANALYZE, который вы можете просто комбинировать с VACUUM.

Дополнительную информацию см. в документации .

Ответ 3

Привет Не лучше ли создавать временную таблицу с 10% необходимых записей. Затем отпустите оригинальную таблицу и переименуйте временную ссылку на оригинал...

Ответ 4

Я относительно новичок в мире Postgres, но я понимаю, что VACUUM ANALYZE рекомендуется. Я думаю, что есть также дополнительный параметр, который просто освобождает пространство. Я также нашел reindex полезным при выполнении пакетных вставок или удалений. Да, я работал с таблицами с таким же количеством строк, и увеличение скорости очень заметно (UBuntu, Core 2 Quad)