Ключові слова тут:
- "сильно оновлений"
- "в таблиці протягом 2-3 годин".
Точка 1. вказує на нижчий коефіцієнт заповнення, а 2. - навпаки. Це сприяє продуктивності, якщо на одній сторінці даних зберігаються кілька рядкових версій. ГОРЯЧІ оновлення досягнуть цього. Прочитайте тут чи тут . На сторінці даних їм потрібна кімната, що перемикається - як мертві кортежі або простір, відведений на fillfactor
<100. Але вони можуть робити свою справу лише в тому випадку, якщо жоден з індексів не містить жодного оновленого стовпця , що має відповідати вашому випадку.
Іншим важливим фактором тут буде розмір кортежу (порівняно з розміром вашої сторінки (найчастіше це 8 кбіт).
Якщо розмір кортежу становить 4 кб або більше, зменшення коефіцієнта заповнення буде марним, оскільки на сторінці даних ніколи не може бути більше ніж один кортеж. Ви також можете залишити його на 100
(що все одно є за замовчуванням). Однак деякі типи даних "підсмажуються" та зберігаються поза межами рядка, якщо вони перевищують обмеження розміру, тому кортежі, що вимагають, що багато в основному вилку відношення, рідкісні.
Що б ви ні робили, VACUUM
буде виконуватися часто. І це взагалі гарна річ, я б не переймався цим. Ви створюєте багато мертвих кортежів. VACUUM
ідентифікує мертві рядки, які вже не бачать жодної відкритої транзакції. Посібник:
Стандартна форма VACUUM
видаляє версії мертвих рядків у таблицях та індексах і позначає простір, доступний для подальшого повторного використання .
Сміливий акцент мій.
Ви можете грати з налаштуваннями для кожного столу для автовакууму, щоб запустити його менше (або більше) часто лише для цієї таблиці:
Порогові значення та коефіцієнти шкали за замовчуванням взяті
postgresql.conf
, але їх можна переосмислити за таблицею ;
Сміливий акцент мій. Зокрема з autovacuum_vacuum_threshold
іautovacuum_vacuum_scale_factor
. Бігати VACUUM
багато може насправді бути хорошою ідеєю, а не дуже низькою fillfacter
. Це залежить від моделей доступу. Якщо всі кортежі живуть, скажімо, 3 години, і кожен оновлюється кілька разів, я все одно знижую fillfactor
до приблизно 50. Вам доведеться перевірити і знайти солодке місце.
Альтернативи
Все це вбік, оскільки ваші дані здаються непостійними для початку: використовуйте UNLOGGED
таблицю :
Дані, записані в незаблоковані таблиці, не записуються в журнал попереднього запису (див. Главу 29 ), що робить їх значно швидшими, ніж звичайні таблиці. Однак вони не є безпечними для аварій : незамкнена таблиця автоматично обрізається після аварії або нечистого відключення. Вміст незаблокованої таблиці також не копіюється на сервери очікування.
Сміливий акцент мій. Не використовуйте це, якщо ваш сервер може вийти з ладу, і вам потрібні дані після цього. Але якщо ми говоримо про дані сеансу для веб-додатків, це може бути прийнятною ціною.
Або ще більш радикально: використовуйте сховище ключа-значення, як Redis, якщо ви не можете обійтися без функцій та безпеки, що надаються RDBMS взагалі.