开启mysql慢查询日志

相关指令:

//查看是否慢查询
show variables like 'slow_query_log';
//设置慢查询日志保存位置
set global slow_query_log_file = '/home/mysql/sql_log/mysql-slow.log';
//设置是否记录没有使用索引的搜索
set global log_queries_not_using_indexes=on;
//设置慢查询记录事件,0为记录所有
//注意,这个设置后使用show variables like 'long_query_time'查看可能没变
//只需要退出mysql重新登录查看就可以看到已经发生了改变
set global long_query_time=0.01;

将慢查询打开以后,可以使用tail -50 mysql-slow.log来查看慢查询日志,格式如下:

# Time: 2017-03-07T13:34:19.800916Z
# User@Host: root[root] @ localhost []  Id:     6
# Query_time: 0.000217  Lock_time: 0.000111 Rows_sent: 2  Rows_examined: 2
SET timestamp=1488893659;
select * from store limit 10;

//各部分的内容说明,从上到下分别为
//执行的时间
//执行SQL的主机信息
//SQL的执行信息
//SQL执行时间
//SQL内容

分析工具mysqldump

在实际生产环境中,可能一天要产生几个G的慢查询日志,单靠人工查看慢查询日志的方式显然效率太低。

可以使用mysql自带的mysqldumpslow工具来进行分析

使用mysqldumpsql -h可以查看自带帮助说明

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --help       write this text to standard output

  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: query time
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

//常用的参数
//-s 指定顺序
//-t 指定显示的条数

//结果示例

Count: 1  Time=1.03s (1s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select sleep(N)

Count: 1  Time=0.10s (0s)  Lock=0.02s (0s)  Rows=0.0 (0), root[root]@localhost
  CREATE TABLE test.documents
  (
  id                    INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,
  group_id      INTEGER NOT NULL,
  group_id2     INTEGER NOT NULL,
  date_added    DATETIME NOT NULL,
  title         VARCHAR(N) NOT NULL,
  content               TEXT NOT NULL
  )

分析工具pt-query-digest 2.2.7

安装方法:
ubuntu下可直接使用apt-get install percona-toolkit

使用方法:

直接分析查看:pt-query-digest slow.log

示例:

分析结果由三部分组成,第一部分是汇总信息包括总的查询数、跨越的时间、发送的行数和扫描的行数等信息。
第二部分,是统计慢查询所在的表和查询的类型以及相应的时间和时间占比等信息。
第三部分是具体慢查询情况。

# 240ms user time, 20ms system time, 25.61M rss, 88.04M vsz
# Current date: Fri Mar 10 10:43:11 2017
# Hostname: iZ9460e7nt4Z
# Files: mysql-slow.log
# Overall: 89 total, 24 unique, 0.00 QPS, 0.00x concurrency ______________
# Time range: 2017-03-08 14:22:58 to 2017-03-10 10:39:22
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time             1s    68us      1s    15ms     6ms   105ms   332us
# Lock time          113ms       0    51ms     1ms   103us     7ms    22us
# Rows sent          1.82k       0    1000   20.98   34.95  102.01    5.75
# Rows examine       6.52k       0    1000   74.99  136.99  105.76   76.28
# Query size         7.15k      15     489   82.26  192.76   66.57   72.65

# Profile
# Rank Query ID           Response time Calls R/Call V/M   Item
# ==== ================== ============= ===== ====== ===== ===============
#    1 0xF9A57DD5A41825CA  1.0255 77.5%     1 1.0255  0.00 SELECT
#    2 0x357470D8BF5D185D  0.1252  9.5%     1 0.1252  0.00 CREATE TABLE test.documents
#    3 0x7395165C3563CA41  0.0535  4.0%     2 0.0268  0.05 SELECT documents
#    4 0xDB11785DC0044597  0.0456  3.4%     7 0.0065  0.00 SELECT discussions catagories
#    5 0x7FF1B2B54A693E87  0.0427  3.2%     1 0.0427  0.00 SELECT INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.PARTITIONS
# MISC 0xMISC              0.0312  2.4%    77 0.0004   0.0 <19 ITEMS>

# Query 1: 0 QPS, 0x concurrency, ID 0xF9A57DD5A41825CA at byte 12423 ____
# Scores: V/M = 0.00
# Time range: all events occurred at 2017-03-09 15:20:44
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count          1       1
# Exec time     77      1s      1s      1s      1s      1s       0      1s
# Lock time      0       0       0       0       0       0       0       0
# Rows sent      0       1       1       1       1       1       0       1
# Rows examine   0       0       0       0       0       0       0       0
# Query size     0      15      15      15      15      15       0      15
# String:
# Databases    test
# Hosts        localhost
# Users        root
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ################################################################
#  10s+
# EXPLAIN /*!50100 PARTITIONS*/
select sleep(1)\G

输出到文件:pt-query-digest slow.log > slow_log.report

输出到数据库表:

pt-query-digest slow.log --review \
 h=127.0.0.1, D=test, p=root, P=3306, u=root, t=query_review \
 --create-review-table \

windows下配置mysql慢查询

wamp 下mysql的配置文件放置在C:\wamp64\bin\mysql\mysql5.7.14\my.ini

开启慢查询,需要在mysqld下面添加如下配置:

[mysqld]
port = 3306
long_query_time = 1
slow_query_log = ON
slow_query_log_file = C:/wamp64/bin/mysql/mysql5.7.14/mysql_slow_query.log

注意,先创建mysql_slow_query.log文件,同时需要将目录\变更成/


参考网站:


慢查询

登陆发表评论