网站打开很慢,爆出了连接数据库的错误,进入服务器,top 看了下,mysql占用cpu 基本维持在90以上;
mysql> show variables like '%slow%'; #查看慢查询有没有开启,发现没有,加上了慢查询:
在mysql的配置文件my.cnf 中的[mysqld] 模块下 增加:
slow_query_log = TRUE #开启慢查询日志
slow_query_log_file = /var/log/mysql/slow_query_log.txt #日志存放位置
long_query_time = 5 #超过5秒会记录
慢查询开启后,观察了一阵子,发现并没有记录日志,
mysql> show full processlist; #查看当前实时对mysql的访问情况
发现有条sql语句在运行,但并不复杂;
mysql>flush status; #刷新状态变量
mysql> show status; #查看mysql的所有状态变量
发现 Handler read rnd next 的值有2G多大,该变量表示:从数据文件中读取行的请求数。如果你在扫描很多表,该值会很大。通常情况下这意味着你的表没有做好索引,或者你的查询语句没有使用好索引字段。
重新观察之前并没在意的那台简单的sql语句,发现虽然语句简单但是所查表的数据量很大,而且查询条件字段没建索引,给字段建上索引再 top 下,发现mysql 的cpu占用率为10%一下;
问题得到解决!