我们有这个 mysql 进程正在运行,并且 CPU 占用率高达 200%。有没有什么办法可以解决这个问题?
/usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/xxxxxxxx.com.err --open-files-limit=48480 --pid-file=/var/lib/mysql/xxxxxxxx.com
答案1
正如 EEAA 所评论的:
您需要了解如何观察 mysql 中的进程,并查看哪些查询产生了负载
一个好的开始是查看长时间运行的查询。您可以启用慢查询日志或者执行以下操作:
mysqladmin -u root -p --verbose processlist
或者:
SHOW FULL PROCESSLIST
从 mysql 提示符。
干杯
答案2
我完全同意@HTTP500 的回答。
除了在命令行上运行这些命令之外,您还可以按下up
键并返回以连续运行相同的查询。
我建议你explain
在语句前使用命令。这将明确诊断出你的语法,我认为这就是问题所在。
- 检查所有表都有正确的索引;
- 检查 cron 是否正在对 MyISAM 表(我们所知具有表级锁定)执行插入、更新或删除操作;
答案3
当我的 MySQL 服务器超载时,我会运行mytop
; ,它能让我全面了解服务器上执行的所有查询。这非常有用,因为它可以轻松按通常是罪魁祸首的长时间运行的查询进行排序。
但是,如果您没有,mytop
您可以执行以下操作:
SHOW FULL PROCESSLIST;
将为您提供服务器上所有正在运行的查询的转储。- 一旦确定了查询,您就可以运行
EXPLAIN EXTENDED
该查询。 - 如果是 InnoDB,您可以运行
SHOW ENGINE INNODB STATUS
以获取有关 InnoDB 状态以及任何错误的完整报告。 - 如果它是一个大表请确保索引是最新的。
不管你做什么,不要重新启动服务器因为它将来还会再次发生。