MYSQL教程Mysql占用过高CPU时的优化手段(必看)
《MYSQL教程Mysql占用过高CPU时的优化手段(必看)》要点: Mysql占用CPU过高的时候,该从哪些方面下手进行优化?MYSQL应用 占用CPU过高,可以做如下考虑:MYSQL应用 1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processlist语句,查找负荷最重的SQL语句,优化该SQL,比如适当建立某字段的索引;MYSQL应用 2)打开慢查询日志,将那些执行时间过长且占用资源过多的SQL拿来进行explain分析,导致CPU过高,多数是GroupBy、OrderBy排序问题所导致,然后慢慢进行优化改进.比如优化insert语句、优化group by语句、优化order by语句、优化join语句等等;MYSQL应用 3)考虑定时优化文件及索引;MYSQL应用 4)定期分析表,使用optimize table;MYSQL应用 5)优化数据库对象;MYSQL应用 6)考虑是否是锁问题;MYSQL应用 7)调整一些MySQL Server参数,比如key_buffer_size、table_cache、innodb_buffer_pool_size、innodb_log_file_size等等;MYSQL应用 8)如果数据量过大,可以考虑使用MySQL集群或者搭建高可用环境.MYSQL应用 9)可能由于内存latch(泄露)导致数据库CPU高MYSQL应用 10)在多用户高并发的情况下,任何系统都会hold不住的,所以,使用缓存是必须的,使用memcached或者redis缓存都可以;MYSQL应用 11)看看tmp_table_size大小是否偏小,如果允许,适当的增大一点;MYSQL应用 12)如果max_heap_table_size配置的过小,增大一点;MYSQL应用 13)mysql的sql语句睡眠连接超时时间设置问题(wait_timeout)MYSQL应用 14)使用show processlist查看mysql连接数,看看是否超过了mysql设置的连接数MYSQL应用 下面分享一例遇到过的案例:MYSQL应用 网站在高峰时段访问,点击页面有点卡.登陆服务器,发现机器负载有点高,并且mysql占用了很高的CPU资源,如下图: MySQL负载居高不下,如果打开了慢查询日志功能,最好的办法就是针对慢查询日志里执行慢的sql语句进行优化,如果sql语句用了大量的group by等语句,union联合查询等肯定会将mysql的占用率提高.所以就需要优化sql语句MYSQL应用 除了优化sql语句外,也可以做一些配置上的优化.在mysql中运行show proceslist;出现下面回显结果: 1.查询有大量的Copying to tmp table on disk状态 明显是由于临时表过大导致mysql将临时表写入硬盘影响了整体性能.MYSQL应用 Mysql中tmp_table_size的默认值仅为16MB,在当前的情况下显然是不够用的. 解决办法:调整临时表大小 1)进mysql终端命令修改,加上global,下次进mysql就会生效 mysql> set global tmp_table_size=33554432; 再次登陆mysql 2)my.cnf配置文件修改 [root@www ~]# vim my.cnf 重启mysql 2.show processlist;命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句.比如下面结果: Id User Host db Command Time State Info 常见问题: 一般是睡眠连接过多,严重消耗mysql服务器资源(主要是cpu,内存),并可能导致mysql崩溃.MYSQL应用 解决办法 : 在mysql的配置my.cnf文件中,有一项wait_timeout参数设置.即可设置睡眠连接超时秒数,如果某个连接超时,会被mysql自然终止. MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接. 然而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致下面的报错: The last packet successfully received from the server was 596,688 milliseconds ago. 28800seconds,也就是8小时. 如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql就将该连接关闭.这时,你的Java应用的连接池仍然合法地持有该连接的引用.当用该连接来进行数据库操作时,就碰到上述错误. 查看mysql手册,发现对wait_timeout的最大值分别是24天/365天(windows/linux).MYSQL应用 比如将其改成30天 mysql> set global wait_timeout=124800; 以上这篇Mysql占用过高CPU时的优化手段(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家PHP.MYSQL应用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |