Коли індекси PostgreSQL починають шкодити продуктивності

Індекс пришвидшує читання, але збільшує записи, резервні копії та обслуговування. Надлишок непомітно перетворюється на операційний борг.

Інженер аналізує план запиту та навантаження бази даних на двох моніторах

Починайте з реального навантаження

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

Схожі індекси можуть дублювати роботу

З часом у таблиці накопичуються індекси, створені для окремих інцидентів і старих версій запитів. Два набори стовпців іноді частково перекриваються, але обидва продовжують оновлюватися після кожної зміни рядка. Перегляньте статистику використання за достатньо довгий період, включно з місячними звітами та рідкісними адміністративними задачами. Нульове використання ще не є автоматичним дозволом на видалення, проте це добра підстава знайти власника запиту й перевірити залежності. Рішення про індекс має відповідати довготривалій архітектурі даних, а його вплив потрібно враховувати під час перевірки готовності резервної копії до повного відновлення.

Вартість запису потрібно вимірювати окремо

Кожен індекс збільшує обсяг журналу транзакцій, тривалість масових оновлень і кількість даних у резервній копії. Для сервісу з частими вставками ці витрати можуть бути важливішими за виграш одного читання. Порівняйте швидкість запису до й після зміни на копії реального навантаження. Перевірте реплікацію та відновлення, адже додаткові сторінки потрібно передати, зберегти й повторно відтворити. Оптимізація запиту не повинна непомітно погіршувати весь життєвий цикл даних.

Обслуговування потребує регулярного рішення

Складіть короткий реєстр великих індексів: для якого запиту вони існують, хто відповідає за нього та коли користь перевіряли востаннє. Після зміни структури даних або профілю трафіку повертайтеся до цього списку. Видалення проводьте поетапно, з можливістю швидко відновити індекс і з метриками часу відповіді. Такий процес перетворює індекси з накопиченої спадщини на керований інструмент, користь якого можна пояснити й повторно перевірити.

Коментарі