Я обслуживаю серверы веб-хостинга, и чаще всего сервер замедляется из-за увеличения нагрузки или использования большого количества ресурсов ЦП. Я заметил, что это использование MySQL, которое приводит к значительному увеличению нагрузки, и сервер начинает сканировать, однако я хотел бы узнать, какой пользователь отвечает за частое использование MySQL?
Это можно сделать с помощью довольно простых SHOW PROCESSLIST;
из MySQL CLI в качестве администратора MySQL.
Если есть процесс, который нужно остановить, простой KILL <query Id>;
должен позаботиться об этом.
В этом блоке разработчика ничего не происходит, но это пример того, что вы увидите на выходе:
mysql> show processlist;
+----+------+-----------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+--------+---------+------+-------+------------------+
| 7 | root | localhost | wikidb | Query | 0 | NULL | show processlist |
+----+------+-----------+--------+---------+------+-------+------------------+
Как видите, он отображает полезную информацию о базе данных, в которой выполняется запрос, времени выполнения, статусе запроса и содержимом запроса.
Я согласен с ответами @Michael Hampton и @ Adrian, но хотел бы добавить свое собственное предложение - попробуйте войти на сервер и запустить следующее:
[~]# watch mysqladmin pr
Это должно предоставить вам базы данных, к которым осуществляется доступ, и выполняемые запросы, а добавление «watch» будет отслеживать и обновлять список. Если какая-либо база данных перегружает сервер, вы можете попробовать запустить следующее:
service mysql stop
myisamchk -r /var/lib/mysql/dbname/*.MYI
service mysql start
Если проблема не исчезнет после перезапуска, возможно, вам потребуется оптимизировать запросы или ограничить доступ пользователей к ресурсам сервера MySQL.
Еще одно хорошее предложение - включить журналы запросов / установить низкое время медленного запроса и максимально использовать их / использовать такой инструмент, как percona-toolkit разобрать их.
Мы лично используем MariaDB сборка MySQL, имеющая userstats применен патч, который изменяет information_schema
для включения полезных данных, таких как используемое время ЦП, время занятости и т. д.
Пример:
+------------------+----------+-----------+--------------+--------------+
| USER | CPU_TIME | BUSY_TIME | ROWS_FETCHED | ROWS_UPDATED |
+------------------+----------+-----------+--------------+--------------+
| xxx_agaipdf | 208850 | 219735 | 372405321 | 950924 |
| xxx_pdfseus | 179626 | 196981 | 145208779 | 771474 |
| xxx_gopdf | 177303 | 191366 | 323861619 | 653246 |
| xxx_nextuse | 140624 | 153672 | 37374285 | 425618 |
| xxx_gospel | 135814 | 142874 | 65301676 | 491579 |
+------------------+----------+-----------+--------------+--------------+