mysql消耗过大怎么办 mysql耗cpu

mysqld占用CPU过高是什么原因一般是睡眠连接过多,严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃 。
解决办法 :
mysql的配置my.ini文件中 , 有一项:
wait_timeout, 即可设置睡眠连接超时秒数 , 如果某个连接超时,会被mysql自然终止 。
wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能 , 不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题,通常来说,我觉得把wait_timeout设置为10是个不错的选择,但某些情况下可能也会出问题,比如说有一个CRON脚本,其中两次SQL查询的间隔时间大于10秒的话,那么这个设置就有问题了(当然,这也不是不能解决的问题 , 你可以在程序里时不时mysql_ping一下,以便服务器知道你还活着,重新计算wait_timeout时间):
mysql show global variables like 'wait_timeout';
+----------------------------+-------+
| Variable_name| Value |
+----------------------------+-------+
| wait_timeout| 120|
+----------------------------+-------+
mysql set global wait_timeout=20;
至此 , mysql占用cpu下降了
MySQL CPU占用过高怎么办通过以前对mysql的操作经验,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可 。如果过大不建议用记事本了,容易死掉 , 可以用editplus等工具 。
简单的分为下面几个步骤来解决这个问题:
1、mysql运行正常,也有可能是同步设置问题导致
2、如果mysql运行正常,那就是php的一些sql语句导致问题发现,用root用户进入mysql管理
mysql -u root -p
输入密码
mysql:show processlist 语句,查找负荷最重的 SQL 语句,优化该SQL,比如适当建立某字段的索引 。
通过这个命令我看到原来是有人恶意刷搜索 , 因为dedecms搜索后面调用搜索最高的词 , 导致很多人用工具刷这个,而且是定时有间隔的,所以将这个php程序改名跳转都方法解决了 。
当然如果你的确实是sql语句用了大量的group by等语句,union联合查询等肯定会将mysql的占用率提高 。所以就需要优化sql语句,网站尽量生成静态的 , 一般4W ip的静态网站,mysql占用率几乎为0的 。所以这对于程序员的经验是个考虑 。尽量提高mysql性能 (MySQL 性能优化的最佳20多条经验分享)
下面是豆芽收集的文章,大家都可以参考下
MYSQL CPU 占用 100% 的现象描述
【mysql消耗过大怎么办 mysql耗cpu】早上帮朋友一台服务器解决了 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 为2000,PageView 为 3万左右 。网站A 用的 database 目前有39个表,记录数 60.1万条,占空间 45MB 。按这个数据,MySQL 不可能占用这么高的资源 。
于是在服务器上运行命令,将 mysql 当前的环境变量输出到文件 output.txt:
d:\web\mysql mysqld.exe --help output.txt
发现 tmp_table_size 的值是默认的 32M,于是修改 My.ini, 将 tmp_table_size 赋值到 200M:
d:\web\mysql notepad c:\windows\my.ini

推荐阅读