当我在 Linux 上运行“top”命令时,它显示 MySQL 占用了 400%-500% 的 CPU 使用率。但是当我运行“watch mysqladmin pr”命令查看 MySQL 正在运行的查询列表时,它只显示 2、3 个查询,而且也只花费了 2、3 秒。“top”命令显示 MySQL 的 CPU 使用率不断波动,如 130%、200%、340%、230%、400%、440%、635%、335% 等,但“watch mysqladmin pr”命令未显示占用 CPU 使用率的查询。如何检查 MySQL 为何占用如此多的 CPU?
答案1
我想到两件事:
观察1
当 MySQL 导致 CPU 不断波动时,我首先会检查执行了哪种类型的 MySQL 安装。MySQL RPM 通常包含针对特定平台优化的二进制文件。另一方面,从源代码编译的 MySQL 二进制文件往往不够精简。这样的二进制文件可能过于臃肿,并且在编译时没有进行优化以利用内存。
观察2
如果 InnoDB 缓冲池(innodb_buffer_pool_size)或 MyISAM 密钥缓存(key_buffer_size)配置不足或过度配置,您可能会花时间在没有新查询的情况下清理缓存。