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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
4月前
|
SQL 缓存 关系型数据库
MySQL 慢查询是怎样优化的
本文深入解析了MySQL查询速度变慢的原因及优化策略,涵盖查询缓存、执行流程、SQL优化、执行计划分析(如EXPLAIN)、查询状态查看等内容,帮助开发者快速定位并解决慢查询问题。
161 0
|
4月前
|
SQL 监控 关系型数据库
MySQL慢查询攻略
本文详细介绍了MySQL慢查询优化的全流程,从定位性能瓶颈到具体优化策略,再到高级调优与预防监控。首先通过开启慢查询日志和分析工具(如pt-query-digest)找到问题SQL,接着从索引优化(如最左前缀原则、覆盖索引)、SQL语句重构(如避免全表扫描)及EXPLAIN执行计划解析等方面进行核心优化。随后深入参数调优和架构升级,如调整innodb_buffer_pool_size、实施分库分表等。最后,通过实时监控工具(如PMM、Prometheus+Grafana)建立长效机制,并以电商订单查询为例,展示优化前后性能大幅提升的实战效果。
427 0
|
15天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
49 6
|
5月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
212 23
|
6月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
7月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
848 0
|
5月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
623 54
|
11月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
2967 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板

推荐镜像

更多