我维护webhosting服务器和更多的时候往往是由于负载的增加或大量的CPU资源耗尽导致服务器减速。 我发现它的MySQL使用率导致负载和服务器爬行大量增加,但是我想找出哪个用户是负责MySQL的高使用率?
这可以用一个基本的SHOW PROCESSLIST;来完成SHOW PROCESSLIST; 从MySQL CLI作为MySQLpipe理用户。
如果有一个需要终止的进程,一个简单的KILL <query Id>; 应该照顾的。
这个开发框没有任何内容,但是它是你在输出中看到的一个例子:
mysql> show processlist; +----+------+-----------+--------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+--------+---------+------+-------+------------------+ | 7 | root | localhost | wikidb | Query | 0 | NULL | show processlist | +----+------+-----------+--------+---------+------+-------+------------------+
如您所见,它显示有关运行查询,运行时,查询状态和查询内容的数据库的有用信息。
我同意@迈克尔汉普顿和@阿德里安的回应,但我想添加我自己的build议 – 尝试login到服务器,并运行以下内容:
[~]# watch mysqladmin pr
这应该给你正在被访问的数据库和执行的查询,并添加“监视”将监视和刷新列表。 如果任何数据库超载服务器,您可以尝试运行以下内容:
service mysql stop myisamchk -r /var/lib/mysql/dbname/*.MYI service mysql start
如果问题在重新启动后仍然存在,则可能需要优化查询或限制用户对MySQL服务器资源的访问。
另一个好的build议是启用查询日志/设置慢查询时间低,并采取一个高峰在那些/使用一个工具,如percona工具包来parsing它们。
我们亲自利用MySQL的MariaDB构build,其中应用了修改information_schema的userstats修补程序,以包含有用的数据,如CPU使用时间,繁忙时间等等。
例:
+------------------+----------+-----------+--------------+--------------+ | 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 | +------------------+----------+-----------+--------------+--------------+