欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Mysql占用CPU过高如何优化?

MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高。
占用CPU过高,可以做如下考虑:
1.打开慢查询日志,查询是否是某个SQL语句占用过多资源,如果是的话,可以对SQL语句进行优化,比如优化 insert 语句、优化 group by 语句、优化 order by 语句、优化 join 语句等等;
2.考虑索引问题;
3.定期分析表,使用optimize table;
4.优化数据库对象;
5.考虑是否是锁问题;
6.调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
7.如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。
CPU占用过高和磁盘I/O没有必然联系。如果数据库I/O繁忙CPU反而利用率上不去,因为CPU处于I/O wait状态。
数据库CPU高主要有2个原因,第一个是内存latch,第二个是硬解析。所以我觉得LZ应该从这两方面去排查问题,优化I/O是错误的方向。
一般来讲,排除高并发的因素,还是要找到你导致你CPU过高的哪几条在执行的SQL,可以查slowlog,也可以使用innotop等工具实时监控,将那些执行时间过长且占用资源过多的SQL拿来进行EXPLAIN分析,查看是否索引添加正常,还是SQL效率不行,导致CPU过高,多数是Group By、Order By排序问题所导致,然后慢慢进行优化改进。
你是不是没用索引 全表排序  或者 全表 groupby了?
亦或是 你对日期做了什么操作?
可以考虑定时优化文件及索引,就mysql官方建议,一周或一月左右优化一次,mysql工具之mysqlcheckmysql数据库文件优化

show processlist 或者mysql low query log, 定期监测即可

我不是dba,只能从使用上说一些方法给你参考。
1. 尽量少用或者不用join语句,尽量让所有的sql都使用索引(使用explain检查);
2. 如果是读写量过大的话,考虑在mysql上层搭建缓存(文件缓存或mc);
3. 根据自己的实际状况使用mysql引擎,调优参数。
我反而不同意楼上的观点,cpu高和IO还是有关系的
比如:我们用ssd之后,mysql的qps明显提升

mysql cpu高 99%的可能是sql不合理或者没有合适索引导致 rows_read过高

当然也可能是qps非常高,热点数据读写导致锁争用等

一般情况都是sql问题,建议优化sql

来自 https://www.zhihu.com/question/22002813

普通分类: