MySQL慢查询日志(Slow Query Log)

慢查询日志用来记录执行时间超过指定时长的查询。它的主要作用是:帮助我们发现那些执行时间特别长的 SQL 查询,并且有针对性地进行优化,从而提高系统的整体效率。

业务场景

当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。

场景解决方案

在 MySQL 的安装目录中(C:\ProgramData\MySQL\MySQL Server 8.0),我们可以找到 MySQL 的配置文件“my.ini”。这个文件是一个文本格式的文件,可以直接用记事本打开来阅读。

slow-query-log=1 -- 表示开启慢查询日志,系统将会对慢查询进行记录。
slow_query_log_file="GJTECH-PC-slow.log"  -- 表示慢查询日志的名称是"GJTECH-PC-slow.log"。这里没有指定文件夹,默认就是数据目录:"C:\ProgramData\MySQL\MySQL Server 8.0\Data"。
 
long_query_time=10  -- 表示慢查询的标准是查询执行时间超过10秒

除了刚刚的这些变量,控制慢查询日志的还有一个系统变量:min_examined_row_limit
这个变量的意思是,查询扫描过的最少记录数。这个变量和查询执行时间,共同组成了判别一个查询是否是慢查询的条件。

如果查询扫描过的记录数大于等于这个变量的值,并且查询执行时间超过 long_query_time 的值,那么,这个查询就被记录到慢查询日志中;

--查看最少记录数
mysql> show variables like 'min%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| min_examined_row_limit | 0 |
+------------------------+-------+
1 row in set, 1 warning (0.00 sec)

注意:如果修改了 MySQL 的配置文件“my.ini”,就需要重启服务器,这样才能使修改生效。

案例1:
之前我运行的一个慢查询,被记录到了慢查询日志中。这个例子记录了一个运行时间超过 10 秒的慢查询的发生时间、连接所属的用户、执行的时长、锁表的时长和扫描过的记录数等相关信息。

C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe, Version: 8.0.23 (MySQL Community Server - GPL). started with:
TCP Port: 3306, Named Pipe: MySQL
Time Id Command Argument
# Time: 2021-03-25T07:20:33.412260Z     -- 执行开始时间
# User@Host: root[root] @ localhost [::1] Id: 13   -- 用户
# Query_time: 10.166435 Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0                        -- 执行时长、锁表时长、检查的记录数
use demo;
SET timestamp=1616656823;

未经允许不得转载:任鹏个人博客 » MySQL慢查询日志(Slow Query Log)

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏