MySQL慢查询日志,让“慢”无所遁形

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL慢查询日志,让“慢”无所遁形

⛳️ 1.概述



🐴 1.1 功能


MySQL 的慢查询日志是 MySQL 提供的一种日志记录,

它用来记录在 MySQL 中响应时间超过阀值的语句,

具体指 运行时间超过 e long_query_time 的 值的 SQL ,

则会被记录到慢查询日志中。

long_query_time 的默认值为 10,意思是运行 10S 以上的语句。

默认情况下,Mysql 数据库并不启动慢查询日志,

需要我们手动来设置这个参数,

当然,如果不是调优需要的话,一般不建议启动该参数,

因为开启慢查询日志会或多或少带来一定的性能影响。

慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。


🐴 1.2 要点


当查询超过一定时间没有返回结果的时候,才会记录进慢查询日志。

• 慢查询日志可以帮助 DBA 找出执行效率缓慢的 SQL 语句,为数据库优化工作提供帮助。

• 慢查询日志默认是不开启的,建议开启慢查询日志。

• 当需要进行采样分析时手工开启。


mysql> show variables like ‘%long_query_time%’;

8f60aa5e5a9f48ffb1dfed9b79610bb0.png




⛳️ 2.慢查询日志使用



🐴 2.1 开启日志


关于慢查询日志,主要涉及到下面几个参数:

slow_query_log :是否开启慢查询日志功能(必填)

long_query_time :超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填)

log-slow-queries :慢查询日志文件(不可选),自动在 \data\ 创建一个 [hostname]-slow.log 文件

也就是说,只有满足以上三个条件,“慢查询功能”才可能正确开启或关闭。


mysql> show variables like ‘%slow_%’;


e9104fde8c914c1596f6673edb1b2140.png



mysql> set global slow_query_log=1;

mysql> show variables like ‘%slow_%’;


751472b6277a4895b42421a2647070a7.png


🐴 2.2 日志修改


修改慢查询时长及日志路径方法如下:

修改配置文件my.cnf,在[mysqld]下的下方加入

[mysqld]

slow_query_log = ON

slow_query_log_file = /usr/local/mysql/data/slow.log

long_query_time = 1

重启MySQL服务service mysqld restart即可

测试慢查询日志:

mysql> select sleep(4);


🐴 2.2 日志记录


我写了几条 SQL 语句,按照预先的设定,查询时间超过 1s 的查询将被写入日志。

SELECT t.* FROM subscribe t limit 0,1;
SELECT t.product, t.vendor,    COUNT(DISTINCT t.id) AS vulcnt FROM    temp t
 WHERE 1 = 1 GROUP BY t.vendor, t.product ORDER BY vulcnt DESC;


第一条 SQL 执行时间 0.001s:

98e06dd3a3ab4a97944b9807e18d794a.png

第二条 SQL 执行时间大于 2s:


579e3fe69ae6447689ea0643ceca6524.png

只有第二条 SQL 被“慢查询日志”记录:


# Time: 170407 14:44:23
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     2
# Query_time: 2.133122  Lock_time: 0.106006 Rows_sent: 23878  Rows_examined: 160312
use testDB;
SET timestamp=1491547463;
SELECT
    t.product,
    t.vendor,
    COUNT(DISTINCT t.id) AS vulcnt
FROM
    temp t
WHERE
    1 = 1
GROUP BY
    t.vendor,
    t.product
ORDER BY
    vulcnt DESC;


⛳️ 3.分析工具mysqldumpslow



我们通过查看慢查询日志可以发现,很乱,数据量大的时候,

可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。

所以,这里,我们采用MySQL自带的慢查询日志分析工具析日志 mysqldumpslow工具进行分析。


查看 mysqldumpslow 的帮助信息:mysqldumpslow --help

-s: 表示按何种方式排序:

 c: 访问次数

 l: 锁定时间

 r: 返回记录

 t: 查询时间

 al: 平均锁定时间

 ar: 平均返回记录数

 at: 平均查询时间

-t: 返回前面多少条的数据;

-g: 后边搭配一个正则匹配模式,大小写不敏感的。


常用命令

得到返回记录集最多的10个SQL:

mysqldumpslow -s r -t 10 /var/lib/mysql/show.log

得到访问次数最多的10个SQL:

mysqldumpslow -s c -t 10 /var/lig/mysql/show.log

得到按照时间排序的前10条里面含有左连接的查询语句:

mysqldumpslow -s t -t 10 -g “left join” /var/lig/mysql/show.log

另外建议在使用这些命令时结构 | 和more使用,否则有可能出现爆屏情况:

mysqldumpslow -s r -t 10 /var/lig/mysql/show.log | more

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
14天前
|
监控 关系型数据库 MySQL
分析慢查询日志
【10月更文挑战第29天】分析慢查询日志
35 3
|
14天前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
32 2
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1630 14
|
4天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
24 3
|
26天前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
54 0
|
存储 SQL 关系型数据库
慢查询与MySQL语句优化(下)
如果我们了解了Mysql中的索引原理之后,(详见探秘数据库 —— 事务 + InnoDB存储引擎),如何利用索引并对一些执行较慢的sql进行优化也是必要的,所以我们可以结合索引的原理来探究一下慢查询与优化的知识。
慢查询与MySQL语句优化(下)
|
存储 SQL 关系型数据库
慢查询与MySQL语句优化(上)
如果我们了解了Mysql中的索引原理之后,(详见探秘数据库 —— 事务 + InnoDB存储引擎),如何利用索引并对一些执行较慢的sql进行优化也是必要的,所以我们可以结合索引的原理来探究一下慢查询与优化的知识。
慢查询与MySQL语句优化(上)
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4