51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql 慢日志(slow_log)介绍

慢日志主要是用于以文本形式记录数据库服务运行过程中,执行过程较慢的语句;

利用慢日志信息生成的信息,可以在日常巡检过程中,通过日志定位SQL语句性能问题;

01 日志信息基本配置

mysql> select @@slow_query_log;
+-------------------------+
| @@slow_query_log |
+-------------------------+
|                                 0 |
+-------------------------+
1 row in set (0.00 sec)
-- 此参数配置信息,表示是否激活启动慢日志记录功能,默认处于关闭状态

mysql> select @@slow_query_log_file;
+--------------------------------------------+
| @@slow_query_log_file                    |
+--------------------------------------------+
| /data/3306/data/xiaoQ-01-slow.log |
+--------------------------------------------+
1 row in set (0.00 sec)
-- 此参数配置信息,表示慢日志文件保存的路径信息;建议日志文件路径与数据存放路径进行分离;

mysql> select @@long_query_time;
+---------------------------+
| @@long_query_time |
+---------------------------+
|                    10.000000 |
+---------------------------+
1 row in set (0.00 sec)
-- 此参数信息配置,表示记录慢日志的条件,默认是大于10s执行的语句,就会记录为慢查询语句;(建议时间为0.01~0.1)     

mysql> select @@log_queries_not_using_indexes;
+---------------------------------------------+
| @@log_queries_not_using_indexes |
+---------------------------------------------+
|                                                            0 |
+---------------------------------------------+
1 row in set (0.00 sec)
-- 此参数信息配置,表示慢日志中会记录没有使用索引的语句信息;

# 修改日志默认状态(激活日志):
mysql> set global slow_query_log=1;
mysql> set global long_query_time=0.01;
mysql> set global log_queries_not_using_indexes=1;
-- 可以对以上参数信息进行在线调整,也可以将以上参数编写到数据库my.cnf配置文件中,作为永久配置;

02 日志应用配置核实

mysql> use oldboy;
mysql> show index from t100w;
mysql> alter table t100w drop index idx;
-- 删除数据表中索引信息
mysql> select * from t100w limit 100;
mysql> select * from t100w where id=10;
mysql> select * from t100w where id=20;
mysql> select count(*) from t100w group by num limit 10;
...
-- 模拟执行慢查询的操作语句

# 查看核实慢日志文件是否生成
[root@xiaoQ-01 ~]# ll /data/3306/data/xiaoQ-01-slow.log 
-rw-r----- 1 mysql mysql 6842 11月 22 23:54 /data/3306/data/xiaoQ-01-slow.log
[root@xiaoQ-01 ~]# cat /data/3306/data/xiaoQ-01-slow.log
/usr/local/mysql/bin/mysqld, Version: 8.0.26 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 2022-11-22T15:41:03.849261Z
# User@Host: root[root] @ localhost []  Id:   490
# Query_time: 0.000446  Lock_time: 0.000143 Rows_sent: 100  Rows_examined: 100
use oldboy;
SET timestamp=1669131663;
select * from t100w limit 100;
# Time: 2022-11-22T15:41:05.677310Z
# User@Host: root[root] @ localhost []  Id:   490
# Query_time: 0.000282  Lock_time: 0.000083 Rows_sent: 100  Rows_examined: 100
SET timestamp=1669131665;
select * from t100w limit 100;
# Time: 2022-11-22T15:41:06.630012Z
# User@Host: root[root] @ localhost []  Id:   490
# Query_time: 0.000242  Lock_time: 0.000075 Rows_sent: 100  Rows_examined: 100
SET timestamp=1669131666;
select * from t100w limit 100;
-- 会按照执行语句的操作时间顺序,进行慢查询日志信息的记录;

03 日志信息分析方法

[root@xiaoQ-01 data]# mysqldumpslow -s c -t 3 /data/3306/data/xiaoQ-01-slow.log 
-- 按照慢查询语句的重复执行次数(c)进行排序(-s),取出其中靠前(t)的前三名慢查询语句
-- 还可以扩展使用pt-query-digest更好的分析慢查询日志,支持图形化展示
-- 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  
赞(1)
未经允许不得转载:工具盒子 » mysql 慢日志(slow_log)介绍