作用:记录慢sql,执行比较慢的sql.
路径:mysql> show variables like '%slow_query_log%';
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句。(默认关闭)
注意:慢查询日志不会计算语句在开始执行之前等待锁的时间(initial slow query),mysqld只会从语句等待的锁释放掉,并开始执行开始计算时间(执行开始后的锁定时间会记录)。所以慢查询日志中的语句顺序和语句的发出顺序或者general log的顺序不同。
相关参数:
slow_query_log =1/0 ---开启关闭慢查询
long_query_time = 1 2 3 ---慢查询阀值.(单位是s)
log_queries_not_using_indexes:记录没有用索引的查询
参数:log_throttle_queries_not_using_indexes:#设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
参数:min_examined_row_limit:要检查的行数大于等于N时 才记录为慢查询,前提是必须满足long_query_time和 log-queries-not-using-indexes约束。
参数:log_slow_admin_statements:管理语句是否记录
参数:log_slow_slave_statements:从库的语句执行是否记录.
慢日志信息例子:
# Time: 2018-10-18T21:56:45.731545+08:00
# User@Host: root[root] @ localhost [] Id: 5
# Query_time: 3.059106 Lock_time: 0.000208 Rows_sent: 1048576 Rows_examined: 1048576
SET timestamp=1539871005;
select * from lbg;
分析:
Time:---sql执行完时间。
root[root] @ localhost ---用户、发出sql的ip
Query_time: ----sql执行时间
Lock_time: ---查询等待锁的时间
Rows_sent -----结果集大小
Rows_examined ---扫描行数
SET timestamp ----发出sql的时间
慢日志分析工具: MySQLdumpSlow工具
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回 的记录数来排序,
ac、at、al、ar,表示相应的倒叙;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如:
统计用时最长的10条sql
mysqldumpslow -s t -t 10 mysql-slow.log
执行频率最高的10条sql
mysqldumpslow -s c -t 10 mysql-slow.log
例子:
[root@lbg logs]# mysqldumpslow -s t -t 10 mysql-slow.log
Reading mysql slow query log from mysql-slow.log
Count: 1 Time=18.34s (18s) Lock=0.00s (0s) Rows=1048576.0 (1048576), []@[]
throttle: N 'S' warning(s) suppressed.
Count: 1 Time=3.06s (3s) Lock=0.00s (0s) Rows=1048576.0 (1048576), root[root]@localhost
select * from lbg
Count: 4 Time=0.01s (0s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into lbg select * from lbg
Died at /usr/local/mysql/bin/mysqldumpslow line 161, <> chunk 6.