Mysql占用CPU过高的时候,该从哪些方面下手进行优化?
占用CPU过高,可以做如下考虑:
- 一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引;
- 打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy、OrderBy排序问题所导致,然后慢慢进行优化改进。比如优化insert语句、优化group by语句、优化order by语句、优化join语句等等;
- 考虑定时优化文件及索引;
- 定期分析表,使用optimize table;
- 优化数据库对象;
- 考虑是否是锁问题;
- 调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;
- 如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境。
- 可能由于内存latch(泄露)导致数据库CPU高
- 在多用户高并发的情况下,任何系统都会hold不住的,所以,使用缓存是必须的,使用memcached或者redis缓存都可以;
- 看看tmp_table_size大小是否偏小,如果允许,适当的增大一点;
- 如果max_heap_table_size配置的过小,增大一点;
- mysql的sql语句睡眠连接超时时间设置问题(wait_timeout)
- 使用show processlist查看mysql连接数,看看是否超过了mysql设置的连接数(http://www.cnblogs.com/kevingrace/p/6226324.html)
近期评论