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  
赞(7)
未经允许不得转载:工具盒子 » mysql 慢日志(slow_log)介绍