Mysql进程过载cpu

Mysql进程过载cpu

我们有这个 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 状态以及任何错误的完整报告。
  • 如果它是一个大表请确保索引是最新的。

不管你做什么,不要重新启动服务器因为它将来还会再次发生。

相关内容