Свободное пространство после массового удаления postgres - PullRequest
20 голосов
/ 16 марта 2011

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

Заранее спасибо.

Ответы [ 4 ]

40 голосов
/ 17 марта 2011

Если вы хотите освободить место в файловой системе, вам может помочь 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 минут.

11 голосов
/ 16 марта 2011

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

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

Вы также захотите провести АНАЛИЗ, который вы можете просто объединить с ВАКУУМОМ.

Подробнее см. В документации .

3 голосов
/ 17 марта 2011

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

1 голос
/ 16 марта 2011

Я относительно новичок в мире Postgres, но я понимаю, что ВАКУУМНЫЙ АНАЛИЗ рекомендуется.Я думаю, что есть также подопция, которая просто освобождает место.Я также нашел переиндексацию полезной при выполнении пакетных вставок или удалений.Да, я работал с таблицами с одинаковым количеством строк, и увеличение скорости очень заметно (UBuntu, Core 2 Quad)

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