Запрос стал работать медленно. С чего правильно начать разбор?
- С чего начать оптимизацию медленного запроса?
Сначала измерить: EXPLAIN ANALYZE покажет, что реально происходит, вместо догадок. Затем — по находке: индекс, переписанный запрос, статистика, N+1.
- Найти медленные запросы: pg_stat_statements, лог медленных запросов
- В плане: Seq Scan большой таблицы, ошибка оценки строк, сортировка на диске
- Проверить, не ждёт ли запрос блокировку
А ещё Изменение без измерения «до и после» — гадание
Подробно
План отвечает на ключевые вопросы: читается ли таблица целиком, используется ли индекс, каким способом выполняется соединение и насколько оценка числа строк совпадает с реальностью. Без него оптимизация превращается в перебор гипотез, а добавленные наугад индексы замедляют запись и занимают место, ничего не ускоряя. Порядок такой: воспроизвести проблему, посмотреть план, изменить одно, снова измерить.
Что хотят услышать
- Измерение через план.
- Где искать медленные запросы.
- Типичные находки.
Частые ошибки
- Добавлять индексы, не посмотрев план.
- Оптимизировать запрос, который не является узким местом.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Посмотреть план через EXPLAIN и понять, что база делает на самом деле
- ✗Увеличить объём оперативной памяти на сервере базы данных и перезапустить её
- ✗Сразу добавить индексы на все колонки из WHERE и JOIN, а потом проверить скорость
- ✗Переписать все соединения на подзапросы, они выполняются предсказуемее
Что спросят дальше
- Чем EXPLAIN ANALYZE отличается от EXPLAIN?
- Почему лишние индексы вредны?
Разбор темы
- Практика оптимизации запросов
EXPLAIN и чтение плана, порядок колонок индекса, keyset-пагинация и ловушки, мешающие индексу.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.