Я не думаю, що вам не потрібно вручну пилососити, якщо ви не почнете спостерігати зниження продуктивності. Однак я настійно рекомендую переглянути налаштування вакууму та автовакууму та налаштувати їх під свої потреби
Щоб побачити ваші поточні налаштування, запустіть цей запит:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Більшість полів не є зрозумілими, але ось документація щодо них:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Я б сказав, що вашою метою має бути налаштування автовакууму для послідовного очищення сміття, але не запускайте автовакуум постійно
Найважливіші налаштування:
- autovacuum_vacuum_scale_factor - визначає відсоток кортежів, які можуть загинути до початку очищення. Значення за замовчуванням = 0,2
- autovacuum_vacuum_threshold - мінімальна кількість мертвих кортежів до запуску очищення. Значення за замовчуванням = 50
Поріг допомагає запобігти занадто частому запуску процесу очищення для невеликих столів.
Налаштування за замовчуванням працюють нормально, якщо у вас дуже великі таблиці. Простіше кажучи, якщо у вас є стіл, який займає 100 Гб, ви збираєтесь 20 Гб сміття, перш ніж буде запущена автовакуум. Таким чином, я зазвичай рекомендую встановити низький коефіцієнт масштабу. Наскільки низько вам слід визначити для себе. Я використовую 0,05 у своєму поточному проекті
Порогові значення можна також збільшити. У багатьох додатках є кілька таблиць, які часто оновлюються, а 50 кортежів не так вже й багато. Підвищення того, що до 1000, не повинно спричинити жодних проблем, але, звичайно, слід враховувати власну справу
Ви також можете налаштувати автовакуум і мати різні налаштування для деяких своїх таблиць
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Якщо ви налаштуєте scale_factor та порогові значення, вам слід добре. Ви також можете збільшити autovacuum_vacuum_cost_limit
, що за замовчуванням дорівнює vacuum_cost_limit
200, яке встановлено в 200. Це дуже важлива особливість вакууму, яка не дозволяє йому з'їдати всі ресурси та дозволяє вашій програмі працювати з даними навіть під час процесу вакуумування. , але значення за замовчуванням занадто низьке. Підвищення його до 1000 не повинно призвести до значних затримок, але дозволить вакуумному процесу закінчитися набагато швидше
Звичайно, можна також запускати вакуум вручну. У найпростішому випадку, ви можете мати просту роботу з кроном, яка здійснюватиме повне очищення щовечора, коли до вашої БД не часто звертаються.
Сподіваюся, що це допомагає!