Как в среде Linux анализировать запросы к БД MySQL или почему может тупить запрос?
Доброго всем дня!
Есть некоторый корпоративный портал, поднятый на Apache + PHP в среде Linux CentOS 6.
На сайте используются фреймворки jQuery и Foundation. Портал на столько старый, что некоторые команды в коде PHP редактор кода PHPStorm подчёркивает и пишет, что это осуждается. Переделывать его никто пока не будет, вместо него планируется внедрить битрикс, но это отдельная печаль.
Теперь суть. Представьте себе модальное окно, где есть дри поля и кнопка "Выполнить".
Первая кнопка - "Регион", вторая - "Подразделение", третья - "Получатель задачи".
При выборе любого значения в поле "Регион" через AJAX посылается GET-запрос к серверу, который из БД MySQL по коду региона получает список подразделений и возвращает его. Этот код вставляется во второй select, который "Подразделение". С получателем задачи аналогично.
Так вот между выбором региона и получением списка подразделений проходит чертовски много времени, примерно секунд 6. Ещё 6 секунд на загрузку получателей задачи по выбору поля "Подразделение". Уже 12 секунд. Смешно, скажете вы? А теперь представьте что руководителю отдела надо распределить между подчинёнными 30 задач утром. Представили? Так-то это 6 минуты, не считая времени, которое тратится на то, чтобы зайти в каждую задачу, нажать кнопку "Переадресация" и временем загрузки модального окна, о котором я пишу. Грубо говоря, надо потратить в зависимости от количества задач от 10 до 15 и даже 20 минут, на распределение задач по отделу.
Короче бесит.
Стали разбираться и наткнулись на то, что тупит какой-то запрос в PHP к БД. Но отловить его не можем.
В связи с этим вопрос: Чем и как в Linux можно мониторить запросы к БД и их анализировать?
Я не самый крутой задаватель вопросов, поэтому отвечу на дополнительные уточняющие вопросы.
Заранее спасибо.
Нужно начать с анализа кода, может у вас в коде миллион раз вызыватся быстрый запрос. В слоу логи не попадает, а код тормозит. Сталкивался с таким на своей практике
Формируем MySQL slow log, по его результату делаем EXPLAIN. Делаем выводы из результата. Если что можно было - оптимизировали - возвращаемся в код и начинаем плакать за анализом написанной там бездумной лапши и оптимизировать