Средняя загрузка моего сервиса высокая, всегда около 15.
Причина в том, что Mysql перегружен.
Мне интересно, как я могу узнать, какой конкретный запрос / скрипт потребляют больше всего ресурсов Mysql?
Спасибо.
Если у вас есть длительные запросы, вы можете поймать их на месте с помощью часов:
watch --interval=1 "mysql -e 'SHOW PROCESSLIST'"
Вы должны увидеть запросы в списке процессов. Если вы не видите весь запрос, просто замените «SHOW PROCESSLIST» на «SHOW FULL PROCESSLIST». Вы должны увидеть имя пользователя, который вызвал запрос, и базу данных, к которой они выполняют запросы. Оттуда вы можете использовать grep для проверки запроса в вашем коде.
Если вы используете фреймворк вроде rails / django, это может быть немного сложнее, поскольку ORM базы данных, встроенный в эти фреймворки, скрывает фактические необработанные запросы от вашего представления. ;-)
Если вы ищете проблемные запросы, вам нужно проверить журнал медленных запросов, который, вероятно, можно найти в <datadir> / <hostname> -slow.log, но ведение журнала определяется переменными:
mysql> show variables like '%slow_quer%';
Это покажет вам медленные запросы (определяемые как занимающие больше времени, чем переменная long_query_time) и какой (mysql) пользователь их выполнил, но не из какого сценария они пришли.
Вы также можете изучить команду «EXPLAIN» и поискать в Интернете подсказки по оптимизации запросов SQL ». Если после этого вам понадобится дополнительная помощь, вернитесь с дополнительной информацией.