分类: MySQL
Mysqldumpslow使用说明 分析慢日志

一、慢查询日志介绍
MySQL中,SQL的执行效率直接影响了MySQL的性能。为了及时发现并处理有性能异常的SQL,MySQL专门设立了慢查询日志(slow query log)。SQL执行时间大于long_query_time设定的时候,MySQL就会将这条SQL记录到慢查询日志中。

MySQL慢查询日志既可以保存成文件,又可以保存在MySQL的表中。由于保存在表中,会给数据库带来额外的压力,一般都保存在文件中,其保存路径由slow_query_log_file变量决定。

慢查询日志记录了SQL的执行日期时间、SQL查询消耗时间、锁定时间、以及SQL语句。慢查询日志是一个流水账,并不能很好的用于统计分析。

二、慢查询用法
mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

mysqldumpslow语法说明:

-s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。
al: average lock time 平均锁定时间
ar: average rows sent 平均返回行数
at: average query time 平均查询时间
c: count 总执行次数
l: lock time 总锁定时间
r: rows sent 总返回行数
t: query time 总查询时间
-t ,show the top n queries,显示前多少名的记录
-a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。
-g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。
-l ,总时间中包含锁定时间

举例说明:
平均执行时间最长的前10条SQL

mysqldumpslow -s at -t 10 dev_121_21-slow.log

执行结果如下:

[root@dev_121_21 data]# mysqldumpslow -s at -t 10 dev_121_21-slow.log 

Reading mysql slow query log from dev_121_21-slow.log
Count: 1  Time=14348.68s (14348s)  Lock=0.00s (0s)  Rows=182897.0 (182897), super_dev[super_dev]@[192.168.120.103]
  SELECT * FROM `MOVIE_INTERFACE_LOG`

Count: 1  Time=6763.39s (6763s)  Lock=0.00s (0s)  Rows=11751450.0 (11751450), super_dev[super_dev]@[192.168.120.103]
  SELECT * FROM `access_log`

Count: 7  Time=5123.90s (35867s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
  call test.pro_test_data_1(N,N)

Count: 2  Time=3449.94s (6899s)  Lock=0.00s (0s)  Rows=2114376.5 (4228753), super_dev[super_dev]@[192.168.120.103]
  SELECT * FROM `UC_USER`

Count: 1  Time=2410.83s (2410s)  Lock=0.00s (0s)  Rows=0.0 (0), dev_user[dev_user]@[192.168.120.223]
  show create table `user_db`.`access_log`

Count: 4  Time=2121.44s (8485s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
  call test.pro_test_data(N,N)

Count: 3  Time=1062.25s (3186s)  Lock=0.00s (0s)  Rows=126317.3 (378952), super_dev[super_dev]@[192.168.120.103]
  SELECT * FROM `TB_BIS_POS_ORDER`

Count: 1  Time=781.73s (781s)  Lock=0.00s (0s)  Rows=0.0 (0), dev_user[dev_user]@[192.168.120.154]
  truncate table test.UC_USER_1

Count: 3  Time=682.35s (2047s)  Lock=0.00s (0s)  Rows=617058.7 (1851176), 2users@2hosts
  SELECT * FROM `SCHE_EXECUTER`

Count: 4  Time=451.14s (1804s)  Lock=0.00s (0s)  Rows=1030821.8 (4123287), 2users@3hosts
  SELECT * FROM `GATEWAY_RECONICILIATION_LOG`
平均锁定时间最长的前10条SQL
mysqldumpslow -s al -t 10 dev_121_21-slow.log

执行次数最多的前10条SQL
mysqldumpslow -s c -t 10 dev_121_21-slow.log

显示SQL的具体值,而不是由N代替。便于查看执行计划并优化
mysqldumpslow -a slow.log

显示所有occ_sys表相关的慢SQL的具体值
mysqldumpslow -a -g 'occ_sys' dev_121_21-slow.log


相关博文:

发表新评论