Что делать, если на продакшене начал тормозить запрос?

«Что делать, если на продакшене начал тормозить запрос?» — вопрос из категории DevOps, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Проведу анализ и устранение проблемы по шагам:

  1. Сначала проверю медленный запрос через Application Insights или аналогичный инструмент мониторинга, чтобы понять точное время выполнения.

  2. Проанализирую план выполнения запроса в SQL Server Profiler или через EXPLAIN в других СУБД. Ищу:

    • Отсутствующие индексы
    • Табличные сканы вместо поиска по индексу
    • Сложные JOIN-ы
    • Проблемы с параметризацией
  3. Оптимизирую запрос:

// Было
var orders = db.Orders.Where(o => o.Date.Year == 2023).ToList();

// Стало - с явным указанием дат и индекса
var startDate = new DateTime(2023, 1, 1);
var endDate = new DateTime(2023, 12, 31);
var orders = db.Orders.Where(o => o.Date >= startDate && o.Date <= endDate).ToList();
  1. Проверю наличие блокировок в БД (deadlocks, long-running transactions).

  2. Рассмотрю кеширование результатов для часто используемых запросов.

  3. Если проблема не решается - добавлю временное логирование и алертинг, чтобы собрать больше данных.