mysqld导致高CPU负载

我的mysqld使用可变时间(2 – 20分钟)的99.9%的CPU,然后回到正常的0.1% – 5%。 检查的进程列表:全部是正常的,1到20次插入或更新,持续2到5秒,大约20个进程处于睡眠模式(可能是因为脚本没有closuresmysql连接,但它们是在5 – 10秒,我没有做脚本:P,但服务器运行良好,过去2年,因为是):

| 15375 | root | localhost | stoc | Query | 0 | NULL | show processlist | | 79480 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL | | 79481 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL | | 79482 | pppoe | localhost | pppoe | Sleep | 4 | NULL | NULL | | 79483 | pppoe | localhost | pppoe | Query | 0 | init | UPDATE acc SET InputOctets="0", OutputOctets="0", InputPackets="unknown", OutputPackets="User | | 79484 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL | | 79485 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL | | 79486 | pppoe | localhost | pppoe | Sleep | 5 | NULL | NULL 

检查RAID,似乎OK:

 [root@db2]# cat /proc/mdstat Personalities : [raid5] [raid4] [raid1] md0 : active raid1 sdd1[3] sdc1[2] sdb1[0] sda1[1] 136448 blocks [4/4] [UUUU] md1 : active raid5 sdd2[3] sdc2[2] sdb2[0] sda2[1] 12023808 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU] md3 : active raid5 sda4[1] sdd4[3] sdc4[2] sdb4[0] 203647488 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU] md2 : active raid5 sda3[1] sdd3[3] sdc3[2] sdb3[0] 24024576 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none> [root@db2]# 

顶部看到我的mysqld CPU负载,但没有别的似乎是错的:

 [root@db2]# top top - 17:56:05 up 7 days, 3:55, 3 users, load average: 32.93, 24.72, 22.70 Tasks: 75 total, 4 running, 71 sleeping, 0 stopped, 0 zombie Cpu(s): 63.4% us, 36.6% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st Mem: 1988824k total, 1304776k used, 684048k free, 99588k buffers Swap: 12023800k total, 0k used, 12023800k free, 951028k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5754 mysql 19 0 236m 57m 5108 R 99.9 2.9 21:58.76 mysqld 1 root 16 0 7216 700 580 S 0.0 0.0 0:00.39 init 2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 

修复了所有的mysql数据库,reindexed raid …我用尽了ideeas …

任何人都有一个ideea这个服务器可以出什么问题?

谢谢

您可以考虑使用像Monyog(1)这样的软件来监视和分析您的数据库。 它会分析并告知您可能想要查看的情况,并就如何解决问题提出build议。 它也可以考虑IO等事情并检测死锁。

您也可以使用Cacti(2)来做到这一点,但是您必须自行开发(3)更多的模块才能获取所需的信息。

mysqlreport(4)非常适合快速诊断,但是应该分析已经运行了至less8小时的数据库。

这些工具中的很多还将通过引入诸如慢速查询日志,有时还包括通用日志来辅助。

显然我不能发布链接到所有的资源,所以这里是一个超链接到所有链接的资源pastebin

根据这个列表获取慢速查询列表,validation是否有合适的表索引。
如果失踪,索引可能会显着减慢。 如果你需要mysql调优,你需要做一个mysql分析,search谷歌。 HTH

你有没有检查慢查询日志 ? 您甚至可能希望启用常规查询日志,并查看是否可以确定发生减速时发生了什么。 你可能会说,两年前写的一些“脚本”对数据库的大小做了一些假设,并且在过去的几年里它的规模已经增长了。

我认为你需要优化你的MySQL查询。 你使用“索引”? 请提供“显示状态”命令的输出,以查看您的服务器是否执行大量的表扫描。 同时logging缓慢的查询,以帮助您识别问题。