Назад | Перейти на главную страницу

Есть ли способ узнать подробную статистику запросов, обработанных Mysql?

Средняя загрузка моего сервиса высокая, всегда около 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 ». Если после этого вам понадобится дополнительная помощь, вернитесь с дополнительной информацией.