Чи потрібно мені REINDEX і VACUUM таблицю після видалення багато рядків?


10

У мене працює база даних PostgreSQL, яка містить кілька таблиць, в яких зберігається інформація про реєстрацію. Ця інформація призначена лише для звітності та завантажується у файл та видаляється з бази даних, якщо старше 30 днів.

Можна видалити мільйони рядків, і ми виконували REINDEX кожен раз після видалення.

Чи цього достатньо, чи ми також маємо працювати з VACUUM або VACUUM ANALYZE? Або REINDEX не потрібен, і ми повинні замість цього просто запустити VACUUM або VACUUM АНАЛІЗ?

Ми використовуємо PostgreSQL 8.2.3, який, на мою думку, не дозволяє автоматично пилососити.


2
Ви можете розглянути питання про розділення, див. Postgresql.org/docs/9.0/static/ddl-partitioning.html ; тоді ви можете просто скинути перегородки і уникнути пилососу.
Алекс

3
Версія 8.2.3 має auto_vacuum, див. Посібник, але слід оновити як можна швидше. Поточна 8.2-версія - 8.2.17. Ви позаду 14 патчів, включаючи пару патчів безпеки. Оновлення до 8,4 або навіть 9,0 - це краща ідея, поліпшено авто-вакуум.
Френк Хайкенс

Відповіді:


13

Вам слід зробити АНАЛІЗ ВАКУУМУ, оскільки ВАКУУМ дозволить повторно використовувати простір, використаний видаленими даними, та запобіжить обертанню транзакцій, а ANALYZE оновить статистику планувальників, що повинно призвести до кращих планів запитів ваших запитів звітування.

Теоретично REINDEX не вимагається, але ви можете виявити, що це призводить до кращих показників, оскільки індекс є суміжним.

Відповідні сторінки документації для 8.2 тут (поточний переіндексація) та тут (рутинне пилосос) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.