Клиент обратился с проблемой - очень тормозит сайт.
Проверили без кэша страница генерировалась 6 секунд из них почти все время выполнение запросов в БД.
Проведена комплексная диагностика высокой нагрузки на сервер базы данных сайта. Основной задачей было выявление наиболее ресурсоемких и часто выполняемых запросов, их оптимизация средствами MySQL и определение запросов, требующих доработки программной логики Битрикс.
В ходе работ включен журнал медленных запросов MySQL с фиксацией операций длительностью более двух секунд. Проанализированы slow query log, статистика Performance Schema, активные процессы во время всплесков нагрузки и планы выполнения запросов. Всего рассмотрено 29 различных производственных SQL-шаблонов без учета служебных диагностических команд.
Для 16 шаблонов подтверждено улучшение планов выполнения или фактического времени работы. В базе оставлено 10 полезных индексов для таблиц элементов, разделов, свойств, фасетного поиска, каталога, журналов Яндекс.Маркета и интеграции Robomarket. Индексы создавались в онлайн-режиме с минимизацией блокировок. Четыре экспериментальных изменения, не давших ожидаемого результата, были полностью отменены. Глобальные настройки оптимизатора возвращены в исходное состояние.
Получены следующие подтвержденные результаты:
- поиск разделов по свойствам ускорен примерно с 4 секунд до 0,03 секунды;
- полная выборка свойств элементов ускорена с 2,18–2,46 до 0,49–0,65 секунды;
- при поиске по артикулу устранено чтение примерно 55 тысяч строк — план перешел к точечному поиску;
- запросы к журналу Яндекс.Маркета сократили среднее число обрабатываемых строк примерно с 11,6 тысячи до 146;
- фильтры дисков ускорены примерно с 50–65 до 10–20 миллисекунд;
- время отдельных фасетных запросов сократилось примерно с 0,9 до 0,20–0,27 секунды.
Для 12 шаблонов достигнут предел оптимизации средствами индексов. Их основная проблема находится на стороне приложения: повторная загрузка всего инфоблока, отсутствие пакетной обработки, N+1-запросы, частые обращения за одними и теми же свойствами и ценами, а также пересчет количества элементов в разделах. Эти запросы подготовлены для передачи разработчику Битрикс.
Дополнительно проверен Query Cache. Несмотря на высокий оборот данных и частые очистки, существенных ожиданий блокировок в контрольном интервале не обнаружено. Поэтому настройки Query Cache не изменялись.
На момент текущей проверки средняя загрузка 12 процессорных ядер составляет около 11,3%. Оперативная память занята на 12,2 из 15,4 ГБ, файл подкачки — на 2,12 из 5 ГБ. Сервер работает стабильно, однако MySQL остается главным потребителем ресурсов.