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

本文涉及的产品
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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
SQL 关系型数据库 MySQL
mysql日志管理 、备份与恢复
mysql日志管理 、备份与恢复
|
8天前
|
SQL 存储 关系型数据库
MySQL慢日志的介绍以及如何使用问题
【5月更文挑战第19天】MySQL慢日志的介绍以及如何使用问题
18 2
|
16天前
|
关系型数据库 MySQL 数据库
mysql数据库bin-log日志管理
mysql数据库bin-log日志管理
|
18天前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
200 0
|
18天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中,如何通过PolarDB for MySQL来查看binlog日志
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
38 1
|
18天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
存储 SQL 关系型数据库
慢查询与MySQL语句优化(下)
如果我们了解了Mysql中的索引原理之后,(详见探秘数据库 —— 事务 + InnoDB存储引擎),如何利用索引并对一些执行较慢的sql进行优化也是必要的,所以我们可以结合索引的原理来探究一下慢查询与优化的知识。
慢查询与MySQL语句优化(下)
|
存储 SQL 关系型数据库
慢查询与MySQL语句优化(上)
如果我们了解了Mysql中的索引原理之后,(详见探秘数据库 —— 事务 + InnoDB存储引擎),如何利用索引并对一些执行较慢的sql进行优化也是必要的,所以我们可以结合索引的原理来探究一下慢查询与优化的知识。
慢查询与MySQL语句优化(上)
|
16天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
124 0
|
11天前
|
存储 SQL 关系型数据库
【MySQL】数据库基础 -- 详解
【MySQL】数据库基础 -- 详解