当前位置: 首页 > news >正文

MySQL 慢查询日志slow query log

MySQL 的慢查询日志(slow query log)是用于记录执行时间超过指定阈值的 SQL 语句的日志,主要用于性能分析和优化。以下是关于慢查询日志的详细介绍和操作指南:

登录 MySQL 后,执行以下命令查看慢查询相关参数:

show variables like '%slow_query%';
show variables like 'long_query_time';

关键参数说明:
slow_query_log:是否开启慢查询日志(ON为开启,OFF为关闭)。
slow_query_log_file:慢查询日志文件路径(如/var/lib/mysql/hostname-slow.log)。
long_query_time:慢查询阈值(单位:秒),执行时间超过此值的 SQL 会被记录(默认 10 秒,可精确到小数,如 0.5 秒)。
log_queries_not_using_indexes:是否记录未使用索引的查询(ON开启,即使执行时间未达阈值也会记录)。

  1. 临时开启 / 修改配置(无需重启 MySQL)
    适合临时调试,MySQL 重启后会失效:
    sql
    – 开启慢查询日志
set global slow_query_log = ON;

– 设置日志文件路径(需确保MySQL有权限写入)

set global slow_query_log_file = '/var/log/mysql/slow.log';

– 设置慢查询阈值(如1秒,支持小数)

set global long_query_time = 1;

– 记录未使用索引的查询(慎用,可能产生大量日志)

set global log_queries_not_using_indexes = ON;
| slow_query_log_file | /data/3307/data/oracle-slow.log 
  1. 永久配置(推荐)
    修改 MySQL 配置文件(my.cnf或my.ini),重启服务后生效:
[mysqld]开启慢查询日志
slow_query_log = 1日志文件路径
slow_query_log_file = /data/3307/data/slow.log 
#慢查询阈值(0.1秒)
long_query_time = 0.1记录未使用索引的查询(可选)
log_queries_not_using_indexes = 1
#记录管理语句(如ALTER TABLE,可选)
log_slow_admin_statements = 1
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |    10+-----------------+-----------+
[root@oracle 3307]# cat my.cnf 
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
gtid_mode=ON
enforce_gtid_consistency=ON
autocommit=0
server_id=7
log_bin=/data/3307/mysql-bin
binlog_format=row
slow_query_log = 1
slow_query_log_file = /data/3307/data/slow.log
long_query_time = 0.1
log_queries_not_using_indexes = 1

重启数据库

[root@oracle 3307]# systemctl restart mysqld3307.service

使用t100w表做些慢查询的数据

mysql> select *  from t100w where  k1='aa' limit 100;
……
| 396221 | 994690 | aa   | ab89 | 2019-07-09 16:08:12 |
+--------+--------+------+------+---------------------+
100 rows in set (0.50 sec)

0.5秒

只有k2有索引

mysql> select *  from t100w where  k1='lm' limit 600;

多执行做一些数据

查看慢日志文件

[root@oracle data]# vim slow.log 

在这里插入图片描述
通过分析慢语句去优化查询

三、慢查询日志的分析

  1. 直接查看日志内容
    慢查询日志的每条记录包含以下关键信息:
    执行时间(Time)
    执行时长(Query_time,单位秒)
    锁定时间(Lock_time)
    扫描行数(Rows_examined)
    影响行数(Rows_sent)
    具体 SQL 语句
    示例片段:
    plaintext
    #Time: 2023-10-01T12:34:56.789000Z
    #User@Host: root[root] @ localhost [] Id: 123
    Query_time: 2.500000 Lock_time: 0.000100 Rows_sent: 100 Rows_examined: 10000
    use testdb;
    SET timestamp=1696154096;
    SELECT * FROM users WHERE age > 30; – 未使用索引,扫描10000行
  2. 使用专用工具分析
    mysqldumpslow(MySQL 自带):
    汇总慢查询日志,按执行次数、时间等排序:
    bash
    查看使用最频繁的10条慢查询
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

查看执行时间最长的10条慢查询

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

参数说明:-s c(按次数)、-s t(按时间)、-t 10(显示前 10 条)。

[root@oracle data]# mysqldumpslow -s c -t 10  slow.log 
Reading mysql slow query log from slow.log
Count: 10  Time=0.72s (7s)  Lock=0.00s (0s)  Rows=233.7 (2337), root[root]@localhostselect *  from t100w where  k1='S' limit N
简化成一类语句,进行执行计划分析,是否走索引,然后优化Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=600.0 (600), root[root]@localhostselect *  from t100w where  id>N limit NCount: 1  Time=0.00s (0s)  Lock=0.01s (0s)  Rows=600.0 (600), root[root]@localhostselect *  from t100w where  id!=N limit NDied at /application/mysql/bin/mysqldumpslow line 161, <> chunk 12.
[root@oracle data]# 

pt-query-digest(Percona Toolkit 工具):

更强大的分析工具,支持按 SQL 模板分组、计算平均耗时等:
bash

pt-query-digest /var/log/mysql/slow.log

pt-query-digest(Percona Toolkit 工具):安装

安装 pt-query-digest 工具可以通过以下步骤完成:

下载工具:从 Percona 官方网站获取工具包。

https://www.percona.com/downloadswget https://downloads.percona.com/downloads/percona-toolkit/3.5.0/binary/tarball/percona-toolkit-3.5.0_x86_64.tar.gz

解压安装:

tar -zxvf percona-toolkit-3.5.0_x86_64.tar.gz
cd percona-toolkit-3.5.0
perl Makefile.PL PREFIX=/usr/local/percona-toolkit

报错如下:

Can’t locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .) at Makefile.PL line 2.
BEGIN failed–compilation aborted at Makefile.PL line 2.
步骤6. 使用以下命令解决。

yum install perl-ExtUtils-MakeMaker

然后继续执行上面语句

perl Makefile.PL PREFIX=/usr/local/percona-toolkit
make && make install

控制台输出如下,则编译安装成功。
在这里插入图片描述
安装依赖:确保安装了 Perl 模块,如 perl-DBD-MySQL 和 perl-Digest-MD5。

yum install perl-DBD-MySQL perl-Digest-MD5

学习跟使用Percona Toolkit 工具 的使用方法
华为云社区开发者博客:
使用 pt-query-digest 工具分析 MySQL 慢日志
https://bbs.huaweicloud.com/blogs/432109

进入到安装路径下面

[root@oracle bin]# ./pt-query-digest   /data/3307/data/slow.log   >  /data/3307/data/A.txt

在这里插入图片描述
修改环境变量

[root@oracle data]# vim /etc/profile

添加pt工具的安装路径

export PATH=$PATH:/application/mysql/bin:/server/tools/percona-toolkit-3.5.0/bin

使之生效

[root@oracle data]# source /etc/profile

更多工具使用方法自己进行知识扩充

http://www.dtcms.com/a/438328.html

相关文章:

  • 刷赞抖音推广网站长沙网站seo分析
  • 怎么做网站界面设计如何推广店铺呢
  • C++笔记(面向对象)六(4+2C++11)个缺省函数详解
  • CTFHub 信息泄露通关笔记7:Git泄露 Log
  • 【Svelte】如何自定义路径别名(alias)?
  • 公司做哪个网站比较好西安外贸网站建设公司
  • DeepSeek-V3.2-Exp + PH8:国产大模型的性价比革命
  • 第二十三讲:特殊类和类型转换
  • 如何区分数学中的定理、引理、命题?
  • 森东网站建设南昌网站排名优化软件
  • 深圳网站建设制作开发公司开发公司app
  • 《强化学习数学原理》学习笔记8——贝尔曼最优公式小结
  • discuz网站开发深圳建设网站首页
  • Linux信号处理的相关数据结构和操作函数
  • 分类信息网站手机企业网站开发
  • 做杂志的网站有哪些织梦网站系统
  • 我的网站百度怎么搜索不到了文山网站建设代理
  • 小程序推广网站免费wordpress模板下载地址
  • 第66篇:AI+交通:智能驾驶、交通流优化与智慧物流
  • 苏州自学网站建设平台做外国美食的视频网站
  • 黄冈app下载推广平台优化视频
  • 学习日记20:GraphGPT
  • 做网站加班多吗蛋糕店网站建设方案
  • 从餐馆迎客看 accept4:更灵活的“接客“高手
  • Metasploit基础(MSF)
  • 浅析物理层过程
  • 总结 IP 协议的相关特性
  • 网球馆自动预约系统的反调试
  • PyQt5 QLineEdit组件详解:单行文本输入控件的完整指南
  • 网站建设的毕业报告公司名称变更流程及需材料