
Чому потужний сервер — не завжди панацея
Продуктивність корпоративних систем залежить не лише від характеристик обладнання. Якщо запит, що раніше виконувався миттєво, почав сповільнюватися, причина найчастіше криється в плані виконання, застарілій статистиці або неефективних індексах. Замість екстенсивного нарощування ресурсів варто почати з аналізу того, як саме СУБД обробляє запити.
Аналіз плану виконання
Оптимізатор запитів обирає план на основі оцінок (row estimates). Якщо ці оцінки сильно відрізняються від фактичних показників, система обере неоптимальний шлях. У PostgreSQL 9.6 для цього використовується EXPLAIN ANALYZE. Важливо пам'ятати, що EXPLAIN ANALYZE безпосередньо виконує запит, тому для команд, що модифікують дані (UPDATE, DELETE), його слід запускати обережно. Офіційна документація підкреслює важливість розуміння того, що виконується (execution) та де виникають очікування (blocking): https://www.postgresql.org/docs/9.6/using-explain.html.
Визначення вузьких місць
Повільний SQL — це або очікування ресурсів (CPU, I/O), або блокування транзакцій. Для CPU-bound запитів варто перевірити складні сортування, а для I/O — ефективність читання даних. Використання pg_stat_statements у PostgreSQL або Query Store у SQL Server 2016 дозволяє накопичувати статистику для порівняння планів, що допомагає виявити регресії продуктивності після оновлення індексів або зміни обсягу даних.

Автор матеріалу