最近为公司一台服务器解决了Mysql数据库cpu占用100%的问题。稍整理了一下,将经验记录在这篇文章里:《解决一个 MySQL服务器进程CPU占用100%的文档》
朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下。此主机有10个左右的 database, 分别给十个网站调用。据朋友测试,导致 mysqld-nt.exe cpu 占用奇高的是网站A,一旦在 IIS 中将此网站停止服务,CPU 占用就降下来了。一启用,则马上上升。
MYSQL数据库CPU占用100%的解决过程
今天仔细检查了一下。目前此网站的七日平均日IP为几百,PageView只有几千。并且只有一个网站数据库,39个表,记录数几十万条,占空间175MB。按这个数据,MySQL 不可能占用这么高的资源。
于是在服务器上运行命令,将 mysql 当前的环境变量输出到文件 output.txt:
d:mysql> mysqld.exe --help >output.txt
发现 tmp_table_size 的值是默认的 32M,于是修改 My.ini, 将 tmp_table_size 赋值到 200M:
d:mysql> notepad c:windowsmy.ini
[mysqld]
tmp_table_size=200M
然后重启 MySQL 服务。CPU 占用有轻微下降,以前的CPU 占用波形图是 100% 一根直线,现在则在 97%~100%之间起伏。这表明调整 tmp_table_size 参数对 MYSQL 性能提升有改善作用。但问题还没有完全解决。
于是进入 mysql 的 shell 命令行,调用 show processlist, 查看当前 mysql 使用频繁的 sql 语句:
mysql> show processlist;
反复调用此命令,发现网站网站SQL语句较少在process list中出现:
后来在网上查询资料,很多说是索引问题,后来根据数据的相关建立了多个索引。CPU使用率明显下降,经过几个小时的测试观察,mysal点用CPU100%的问题终于解决了,看来索引是很重要的。在这里与大家分享一下。