如何启用 MySQL慢查询日志并使用工具分析慢查询日志

当我们的系统便的缓慢,数据了反应迟钝时,我们就应该是看看MySQL是否在执行一些耗时耗资源的的操作,我们可以通过启用 MySQL慢查询日志并通过分析日志来获悉这类查询语句。

首先我们看看是否已经启用了慢查询日志:

mysql> show variables like '%slow%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| log_slow_queries    | OFF                             |
| slow_launch_time    | 2                               |
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
+---------------------+---------------------------------+
4 rows in set (0.00 sec)

没有启用,我们可以通过修改 my.cnf 来启用,在 my.cnf 中添加如下几行

#日志目录
log-slow-queries = /var/log/mysql/slowquery.log
#记录下查询时间查过2秒
long_query_time = 2
#表示记录下没有使用索引的查询
log-queries-not-using-indexes

然后重启 MySQL使修改的配置生效。

慢查询日志分析:
1、使用 mysql自带的 mysqldumpslow工具分析
命令选项:

  -d           调试
  -s ORDER     设置排序,默认为 at
                al: 平均锁定时间
                ar: 平均发送的数据行
                at: 平均查询时间
                 c: 数量
                 l: 锁定时间
                 r: 发送的数据行
                 t: 查询时间  
  -r           颠倒排序,数值最大的在最后
  -t NUM       仅仅显示前 NUM条记录
  -a           不将数据抽象显示为N,或把字符串抽象为 S
  -n NUM       将至少有NUM位的数字抽象为名字
  -g PATTERN   仅显示查询语句包含 PATTERN 的记录
  -h HOSTNAME   *-slow.log的主机名,可以是通配符,默认为 *匹配所有的
  -i NAME      服务器实例(当使用 mysql.server 脚本启动时)
  -l           不从从时间中去除锁定时间

举例:
mysqldumpslow -t=10 -a /var/log/mysql/slow-query.log

2、使用 mysqlsla工具分析慢查询日志
http://hackmysql.com/mysqlsla
http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz

安装:

wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
tar zvxf mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make
make install
mysqlsla /var/log/mysql/slow-query.log

说明:

queries total   :总查询次数 unique:去重后的sql数量
sorted by       : 输出报表的内容排序,最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数
Count           :sql的执行次数及占总的slow log数量的百分比
Time            :执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比
95% of Time     :去除最快和最慢的sql, 覆盖率占95%的sql的执行时间
Lock Time       :等待锁的时间
95% of Lock     :95%的慢sql等待锁时间
Rows sent       :结果行统计数量, 包括平均, 最小, 最大数量
Rows examined   :扫描的行数量
Database        :属于哪个数据库
Users           :哪个用户
IP              :占到所有用户执行的sql百分比
Query abstract  :抽象后的sql语句
Query sample    :sql语句

Post a Comment

Your email is never shared. Required fields are marked *

*
*