海洋cms程序mysql数据库占用CPU的一些优化心得

2020-05-2615:28:16 发表评论 772

有个海洋cms的站,白天正常,一到晚上高峰期的时候,cpu持续400%的跑(4核心CPU),很快就将负载占满,导致网站处于一种假死的状态之下,能打开,却非常的缓慢。
在处理这个问题的时候,走路了不少的弯路。最开始的时候因为网站对接了好几个机器人进行搜索,以为是搜索的原因导致的CPU跑满,于是停止过一段时间的机器人,有点效果,但是不明显,可以说基本没有什么改善。
这时候,想到了和coerseek进行对接来加快搜索,但是自己对接了几次都失败了,最终以放弃而告终。到这个时候,基本算是没有了什么思路了,这个时候海洋升级了Redis功能,于是开启了Redis这次效果确实是好了点了,重启mysql之后能多支撑一会,但是还是马上就还是满了。
网站继续慢,高峰期继续打不开,这个时候才开始在网上找mysql占用cpu的原因,但是网上全部都是说的对数据库进行索引,但是自己对对数据库操作不是很熟悉,不敢随便执行命令,备份了也不敢,又遇到了障碍。
无意中在一篇文章中看到说是修改数据库tmp_table_size的参数能有效缓解,于是,找到tmp_table_size进行了修改。修改方法如下:

调整参数 tmp_table_size、max_heap_table_size

这两个参数是mysql对临时表的大小控制 其中

tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定
max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
vi /etc/my.cnf
[mysqld]
max_heap_table_size = 200M
tmp_table_size = 200M

然后重启 MySQL 服务。CPU 占用有所下降

效果还是不是很理想,在打算放弃的时候,想到以前有个站几千万数据每次索引卡住的时候使用phpmyadmin对数据库进行优化就会好,抱着试一试的想法备份数据库后优化了一次。意想不到的惊喜出现了,重启数据库进程之后CPU和负载的占用马上就下来了,观察了3天,负载一直没有超过百分之30过。自此困扰了我半个多月的问题终于给解决了。

ps: 其实在宝塔面板里面的mysql设置里有个性能调整,只要选择一下你当前服务器的内存大小,宝塔会给出一个优化参数的方案,只接保存,重启mysql就可以了。

发表评论

您必须登录才能发表评论!