Почему производительность PostgreSQL не достигает своего максимума после VACUUM FULL? - PullRequest
1 голос
/ 29 июня 2010

У меня есть таблица с несколькими миллионами кортежей.

Я выполняю обновления в большинстве из них.

Первое обновление занимает около минуты. Второй, занимает две минуты. Третье обновление занимает четыре минуты.

После этого я выполняю VACUUM FULL.

Затем я снова запускаю обновление, что занимает две минуты.

Если я дам дамп базы данных и заново создам ее, первое обновление займет одну минуту.

Почему производительность PostgreSQL не достигает максимума после VACUUM FULL?

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

VACUUM FULL не сжимает индексы.Фактически, индексы могут быть в худшей форме после выполнения VACUUM FULL.После VACUUM FULL вы должны переиндексировать таблицу.

Однако VACUUM FULL + REINDEX довольно медленный.Вы можете добиться того же эффекта от сжатия таблицы и индексов с помощью команды CLUSTER, которая занимает небольшую часть времени.Он имеет дополнительное преимущество, заключающееся в том, что он будет упорядочивать вашу таблицу на основе индекса, который вы выбрали для CLUSTER.Это может улучшить производительность запросов.Недостатки CLUSTER по сравнению с VACUUM FULL + REINDEX в том, что он требует примерно вдвое больше дискового пространства во время работы.Кроме того, будьте очень осторожны с этой командой, если вы используете версию старше 8.3.Это не безопасно для MVCC, и вы можете потерять данные.

Кроме того, вы можете выполнить оператор no-op ALTER TABLE ... ALTER COLUMN, чтобы избавиться от таблицы и индекса, это самое быстрое решение.

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

2 голосов
/ 29 июня 2010

Порядок кортежей может отличаться, это приводит к различным планам запросов. Если вы хотите фиксированный заказ, используйте CLUSTER. Опустите FILLFACTOR также и включите auto_vacuum. А вы тоже АНАЛИЗИРУЛИ?

Используйте EXPLAIN, чтобы увидеть, как выполняется запрос.

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