MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高。占用CPU过高,可以做如下考虑:

1.打开慢查询日志,查询是否是某个SQL语句占用过多资源,如果是的话,可以对SQL语句进行优化,比如优化 insert 语句、优化 group by 语句、优化 order by 语句、优化 join 语句等等;
5.考虑是否是锁问题;
6.调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
7.如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。
MySQL的NOT IN操作符在某些情况下可能会导致性能问题。当NOT IN子查询的结果集较大时,查询可能需要扫描整个结果集,这会导致较高的IO开销和CPU消耗。
此外,如果NOT IN子查询中存在NULL值,那么查询结果可能会受到影响。为了提高性能,可以考虑使用其他操作符,如EXISTS或LEFT JOIN,或者对查询进行优化,例如添加索引或重写查询逻辑。总之,在具体情况下,需要综合考虑数据量、查询逻辑和数据库结构等因素,以选择合适的方法来提高查询性能。
占用IO过高,可以做如下考虑:
1)首先考虑写日志内容过多(或者访问量较大)
日志打印的内容是否合理( 前端应用服务器,要避免程序频繁打本地日志、或者异常日志)
日志级别是否合理
考虑异步写日志(一般可以解决CPU锯齿波动),为减少磁 盘IO操作,将日志写如内存分区;但日志量太大,很容易将内存 写满,再考虑将日志进行压缩。
2)磁盘满(压测过程中现象:TPS降低,响应时间增加)
找到导致磁盘满的大文件,合理的删除,最好有定期清理脚本,可以定期清理
对磁盘空间进行扩大磁盘容量
不好清理的,在主硬盘上进行读写操作,基础数据定时移动 到挂载硬盘上。
3)数据库连接数超限制,导致sleep比较多,sleep任务太多的处理:
程序里每次连接数据库后,记得关闭数据库。
或者,在mysql配置文件中,设置mysql超时时间wait_timout, 默认是八小时,设置低一点
:按行分区模式可以缓解数据库磁盘io压力。1. 相对于单个文件系统或是硬盘,分区可以存储更多的数据;
2. 数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可。