Mysql占用CPU过高如何优化
MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高。
占用CPU过高,可以做如下考虑:
1.查看生产DB服务器top列表,
执行 top 命令
2.使用root用户登录mysql
执行 show full processlist 查看慢查询,反复执行,如果发现一直有select 查询语句存在,为了缓解DB服务器压力,直接使用kill命令杀掉
kill 慢查询的id 如果服务器压力缓解,恢复正常。
3.查询是否有锁问题
show OPEN TABLES where In_use > 0;
查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
4.杀掉当前所有的MySQL连接
mysqladmin -uroot -p processlist|awk -F “|” ‘{print $2}’ |xargs -n 1 mysqladmin -uroot -p kill
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集群或者搭建高可用环境
1. 查看当前 MySQL 进程状态:可以通过“top”命令查看 MySQL 进程在系统中的 CPU 占用率情况,同时也可以通过“show processlist”命令查看当前数据库中运行的 SQL 语句。
2.优化SQL查询语句:可以通过分析当前正在运行的SQL查询语句,找出慢查询语句并进行优化,尽可能减少数据扫描和连接操作,减少 CPU 占用率
3. 调整MySQL配置参数:可以根据实际情况调整MySQL的配置参数,例如将“innodb_buffer_pool_size”等内存参数适当调小,可以避免造成 CPU 飙升的问题
4. 增强服务器配置:如果服务器CPU资源不足,可以考虑增强服务器的CPU配置,从硬件层面解决问题
避免出现 CPU 使用率达到 100% 的一般原则
设置 CPU 使用率告警,实例 CPU 使用率保证一定的冗余度。
应用设计和开发过程中,要考虑查询的优化,遵守MySQL优化的一般优化原则,降低查询的逻辑IO,提高应用可扩展性。
新功能、新模块上线前,要使用生产环境数据进行压力测试。
应用负载(QPS)高
特征:实例的 QPS(每秒执行的查询次数)高,查询比较简单、执行效率高、优化余地小
表现:没有出现慢查询(或者慢查询不是主要原因),且 QPS 和 CPU 使用率曲线变化吻合
常见场景:该状况常见于应用优化过的在线事务交易系统(例如订单系统)、高读取率的热门 Web 网站应用、第三方压力工具测试(例如 Sysbench)等
解决方案
对于由应用负载高导致的 CPU使用率高的状况,使用SQL查询进行优化的余地不大,建议您从应用架构、实例规格等方面来解决,例如:
升级实例规格,增加CPU资源,增加只读实例,将对数据一致性不敏感的查询(比如商品种类查询、列车车次查询)转移到只读实例上,分担主实例压力
数据库进行分库分表,将查询压力分担到多个服务器上
使用 Memcache或者Redis,尽量从缓存中获取常用的查询结果,减轻服务器的压力
对于查询数据比较静态、查询重复度高、查询结果集小于 1 MB 的应用,考虑开启查询缓存(Query Cache)
定位效率低的查询、优化查询的执行效率、降低查询执行的成本
大量行锁冲突、行锁等待或后台任务也有可能会导致实例的 CPU 使用率过高
参考:
https://blog.csdn.net/weixin_43025071/article/details/109443677
https://blog.csdn.net/segegefe/article/details/126803184
https://www.cnblogs.com/ypeih/p/15391227.html
https://blog.51cto.com/u_16099244/6529946
https://blog.51cto.com/vickyzhang/1913054
https://blog.51cto.com/u_12192/6319295
https://www.zhihu.com/question/22002813
https://cloud.tencent.com/developer/article/1483450