В разделе администрирования сайта клиента есть действие, скажем Admin :: Analytics (которое я не создавал, но должен поддерживать), которое компилирует аналитику использования сайта, выполняя пару десятков довольно интенсивных запросов к базе данных. Эта функция всегда была узким местом для производительности приложения при компиляции аналитического отчета. Но в последнее время узкое место стало настолько серьезным, что при доступе к сайту он резко останавливается и зависает на неопределенный срок. До вчерашнего дня у меня никогда не было причин запускать команду «top» на сервере, но, поняв это, я понял, что Admin :: Analytics # index заставляет mysqld вращаться со скоростью свыше 350 +% мощности ЦП на четырехъядерный, производство VPS.
Я скачал свежие копии производственных данных и журнала производства. Однако, когда я получаю доступ к Admin :: Analytics # index локально на моем блоке разработки, используя производственные данные, он загружается примерно через 10 - 12 секунд (и использует ~ 150 +% моего двухъядерного процессора), что, к сожалению, нормально , Я предполагаю, что может быть несоответствие в настройках mysql, которое внезапно вступает в игру. Кроме того, mysqldump базы данных теперь составляет 531 МБ, тогда как это было всего 336 МБ 28 дней назад. В любом случае, у меня нет корневого доступа на VPS, поэтому настройка производительности mysqld была бы обременительной, и я бы очень хотел найти точную причину этой проблемы. Однако журналы производства не содержат информации. по запросам; они просто сообщают о длине этих запросов, которая в среднем составляет несколько минут за штуку (хотя они, похоже, приводили к тому, что mysqld зависал гораздо дольше, чем это, и побуждали меня запросить у нашего хоста перезагрузку mysqld просто для того, чтобы восстановить работу нашего сайта. в одном случае).
Полагаю, я могу попробовать повысить уровень журнала в рабочей среде, чтобы запросить информацию. на запросы к базе данных, выполняемые Admin :: Analytics # index, но в то же время я боюсь повторить это поведение в рабочей среде, потому что я не чувствую необходимости вызывать наш хост для повторного запуска mysqld! Это действие содержит один запрос к базе данных в своем контроллере и пару десятков подготовленных операторов, встроенных в его представление!
Как бы вы приступили к тестированию / диагностике и оптимизации / исправлению этого действия?!
(в сторону: очевидно, я хотел бы полностью заменить эту функцию на Google Analytics или аналогичное решение, но мне нужно исправить эту проблему, прежде чем продолжить.)