MySQL 慢查询日志详解

慢查询日志(Slow Query Log)是 MySQL 提供的一种核心性能优化工具,用于记录执行时间超过指定阈值的 SQL 语句。通过分析这些日志,可以定位数据库性能瓶颈,优化低效查询,提升系统整体效率。


一、慢查询日志的作用
  1. 性能瓶颈定位
    识别执行时间过长的 SQL 语句,帮助找出数据库性能问题的根源(如索引缺失、复杂查询、全表扫描等)。
  2. 优化依据
    提供真实的 SQL 执行数据(如执行时间、锁等待时间、扫描行数等),为优化提供依据。
  3. 系统监控
    监控数据库长期性能变化趋势,及时发现潜在问题。
  4. 索引优化
    记录未使用索引的查询(需配置 log_queries_not_using_indexes),帮助发现索引缺失或无效使用的情况。

二、如何开启慢查询日志
1. 配置文件设置(永久生效)

编辑 MySQL 配置文件(my.cnfmy.ini),在 [mysqld] 段中添加以下参数:

[mysqld]
slow_query_log = 1                  # 开启慢查询日志(1 表示开启)
slow_query_log_file = /path/to/slow.log  # 指定日志文件路径
long_query_time = 2                 # 定义慢查询阈值(单位:秒,默认 10 秒)
log_queries_not_using_indexes = 1   # 记录未使用索引的查询(可选)
log_output = FILE                   # 日志输出方式(FILE 或 TABLE)

保存后重启 MySQL 服务

# Linux 系统
sudo systemctl restart mysqld
2. 动态设置(临时生效)

通过 MySQL 命令行临时启用(重启后失效):

-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
-- 设置慢查询阈值(需重新连接会话才能生效)
SET GLOBAL long_query_time = 2;
-- 指定日志文件路径
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 1;
3. 验证配置

执行以下命令检查配置是否生效:

SHOW VARIABLES LIKE 'slow_query%';
SHOW GLOBAL VARIABLES LIKE 'long_query_time';

三、核心参数详解
参数名类型默认值说明
slow_query_logBooleanOFF慢查询日志总开关
slow_query_log_fileStringhostname-slow.log慢查询日志文件路径
long_query_timeFloat10慢查询阈值(单位:秒)
log_queries_not_using_indexesBooleanOFF是否记录未使用索引的查询
min_examined_row_limitInteger0记录扫描行数超过该值的查询
log_slow_admin_statementsBooleanOFF是否记录慢管理语句(如 ALTER/ANALYZE
log_slow_slave_statementsBooleanOFF是否记录从库慢查询

四、日志内容与格式

慢查询日志记录了以下信息:

  • SQL 语句:被记录的查询语句。
  • 执行时间(Query_time):SQL 执行的总时间。
  • 锁等待时间(Lock_time):SQL 等待锁的时间。
  • 返回行数(Rows_sent):返回给客户端的行数。
  • 扫描行数(Rows_examined):SQL 扫描的行数。
  • 用户信息:执行查询的用户和主机信息。
  • 时间戳:查询执行的日期和时间。

示例日志内容

# Time: 2025-06-30T17:50:07.123456Z
# User@Host: root[root] @ localhost []
# Query_time: 2.345678  Lock_time: 0.000123  Rows_sent: 100  Rows_examined: 10000
SET timestamp=1720000000;
SELECT * FROM users WHERE created_at > '2025-01-01';

五、日志分析方法
1. 直接查看日志文件

使用命令行工具查看日志文件:

# 查看日志内容
less /var/log/mysql/slow.log# 统计慢查询数量
grep -c "Query_time" /var/log/mysql/slow.log
2. 使用 MySQL 自带工具 mysqldumpslow

mysqldumpslow 可以汇总和排序慢查询日志中的 SQL 语句。

# 按执行时间排序,显示前10条
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log# 按查询次数排序,显示前10条
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
3. 使用第三方工具 pt-query-digest

Percona Toolkit 中的 pt-query-digest 提供更详细的分析报告:

pt-query-digest /var/log/mysql/slow.log > analysis_report.txt
4. 查询 mysql.slow_log

如果日志输出到表(log_output=TABLE),可通过 SQL 直接查询:

SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;

六、优化慢查询的典型方法
  1. 添加索引
    对频繁查询的字段(如 WHEREJOINORDER BY)添加索引。
    示例

    CREATE INDEX idx_created_at ON users(created_at);
    
  2. 优化 SQL 语句

    • 避免全表扫描(使用 EXPLAIN 分析执行计划)。
    • 减少子查询,改用 JOIN
    • 避免 SELECT *,仅查询必要字段。
  3. 调整配置参数

    • 根据业务需求调整 long_query_time(例如设置为 1 秒)。
    • 启用 log_queries_not_using_indexes 以发现未使用索引的查询。
  4. 分页与缓存

    • 对高频查询结果进行缓存(如 Redis)。
    • 使用分页限制返回行数(如 LIMIT 100)。

七、常见问题与注意事项
  1. 日志文件过大

    • 定期归档或清理旧日志,避免磁盘空间不足。
    • 使用 log_output=TABLE 将日志存储到数据库表中,便于管理。
  2. 生产环境配置建议

    • 阈值设置:默认阈值为 10 秒,生产环境中建议调低(如 1-2 秒)以捕获更多潜在问题。
    • 权限问题:确保 MySQL 有权限写入日志文件路径。
    • 性能影响:慢查询日志本身会带来轻微性能开销,建议在测试环境调试,生产环境谨慎使用。
  3. 未使用索引的查询
    启用 log_queries_not_using_indexes 后,日志可能快速增长,需结合 EXPLAIN 分析是否需要添加索引。


八、实战案例
案例 1:索引优化

问题:查询 created_at 范围内的用户列表耗时较长。

SELECT * FROM users WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';

优化:在 created_at 字段上创建索引。

CREATE INDEX idx_created_at ON users(created_at);

效果:查询时间从 5 秒降至 0.1 秒。

案例 2:复杂查询优化

问题:关联查询订单和用户表时响应时间过长。

SELECT o.id, o.total 
FROM orders o 
JOIN users u ON o.user_id = u.id 
WHERE o.order_date BETWEEN '2023-01-01' AND '2023-12-31';

优化

  1. order_date 字段上创建索引:

    CREATE INDEX idx_order_date ON orders(order_date);
    
  2. 使用覆盖索引优化查询:

    SELECT o.id, o.total 
    FROM orders o 
    JOIN users u ON o.user_id = u.id 
    WHERE o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
    USE INDEX (idx_order_date);
    

    效果:查询时间从 3 秒降至 0.3 秒。


九、总结

慢查询日志是 MySQL 性能优化的核心工具,通过合理配置和分析,可以显著提升数据库效率。建议结合 EXPLAIN、索引优化和 SQL 重写策略,持续监控和调优数据库性能。

👍 不积跬步,无以至千里
😊 希望对你有帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86930.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UV安装Python指南总结

UV安装Python指南总结 UV是一个Python包管理工具,它可以帮助我们安装和管理Python版本。以下是关于UV安装Python的主要功能和用法总结。 基本使用 安装最新版Python uv python install注意:UV使用Astral的python-build-standalone项目提供的Python发行版,而不是…

运维基础-MYSQL数据库-笔记

序 欠10年前自己的一份笔记,献给今后的自己。 数据库介绍 数据的时代 涉及的数据量大数据不随程序的结束而消失数据被多个应用程序共享大数据 数据库的发展史 萌芽阶段:文件系统 使用磁盘文件来存储数据初级阶段:第一代数据库 出现了网状…

从GPTs到Real智能体:目前常见的几种创建智能体方式

文章目录 智能体的三个发展阶段低阶智能体(面向过程) VS 高阶智能体(面向目标)主流智能体创建平台实践基础型平台cherry-studio豆包讯飞星火腾讯元器 高阶智能体开发体系cline开发套件Coze平台Dify开源框架Manus突破性方案 技术演进趋势总结 智能体的三个发展阶段 当前智能体技…

WPF 实现自定义数字输入弹窗

1.前端代码实现 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品识别系统flask

查看完整项目包点击文末名片 项目简介 本项目 基于YOLO的海洋垃圾物品识别系统 旨在利用深度学习中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;实现对海洋垃圾的自动识别与分类。通过构建一个基于Flask的Web应用&#xff0c;用户可以方便地上传图片&…

从数据到决策:UI前端如何利用数字孪生技术提升管理效率?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;企业管理者正面临数据过载与决策滞后的双重挑战 ——IDC 研…

Spring Boot高并发 锁的使用方法

Spring Boot高并发 锁的使用方法 在高并发场景中&#xff08;比如电商秒杀、抢票系统、转账交易&#xff09;&#xff0c;多个线程/用户会同时操作同一共享资源&#xff08;如库存、账户余额、订单号&#xff09;。如果不做控制&#xff0c;会导致数据错误&#xff08;如库存超…

二十九:Dynamic Prompts插件动态提示词讲解

引言:可变化提示词,随机抽取不固定 使用方式一:{提示词1|提示词2|。。。。}------从提示词种随机抽取生成 方式二:{25::提示词1|75::提示词2}------数字为每个提示词的占比,相当于权重 方式三:{2$$提示词1|提示词2|提示词3|提示词4|。。。}从中选区2个搭配生成(可以换 比…

vscode 改注释的颜色,默认是灰色的,想改成红色

修改VScode编辑器默认注释的颜色_databricks代码中怎么设置让注释是灰色的-CSDN博客 //改变注释颜色"editor.tokenColorCustomizations": {"comments": "#009933" // 注释}, //如果后面还加内容&#xff0c;记得块末用逗号隔开我自己用的vscdoe.…

chili3d笔记22 正交投影3d重建笔记3 面构建

双视图重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…

Kotlin 协程使用与通信

一、协程基础使用 1. 协程的三种创建方式 (1) launch - 启动后台作业 val job CoroutineScope(Dispatchers.IO).launch {// 后台操作delay(1000)println("任务完成 ${Thread.currentThread().name}")// 输出&#xff1a;任务完成 DefaultDispatcher-worker-1 } j…

Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程

以下是为Ubuntu服务器&#xff08;公网&#xff09;- Ubuntu客户端&#xff08;内网&#xff09;的FRP内网穿透配置教程&#xff0c;基于最新版本&#xff08;2025年6月&#xff0c;使用frp_0.61.1_linux_amd64&#xff09;整理&#xff1a; 一、服务端配置&#xff08;公网Ubu…

什么是哈希函数(SHA-256)

SHA-256 是区块链系统中最核心的加密基础之一&#xff0c;尤其是在比特币、以太坊、文件存证等场景中扮演“指纹识别器”的角色。下面是对它的详细讲解&#xff0c;包括原理、特点、用途和代码示例。 &#x1f4cc; 一、什么是 SHA-256&#xff1f; SHA-256 是一种密码学哈希函…

大模型的“Tomcat”:一文读懂AI推理引擎(Inference Engine)

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

《从0到1:C/C++音视频开发自学完全指南》

从0到1&#xff1a;C/C音视频开发自学完全指南 一、开篇&#xff1a;为什么选择C/C切入音视频开发&#xff1f; 当你刷着抖音短视频、参加腾讯会议、观看B站直播时&#xff0c;背后都是音视频技术在支撑。根据艾瑞咨询数据&#xff0c;2024年中国音视频相关产业规模已突破5000…

微信小程序之单行溢出隐藏和双行溢出隐藏

首先&#xff0c;我们做个text&#xff0c;加入了一个长文本&#xff0c;就像下面那样&#xff1a; wxml : <view class"container"><text>刘德华&#xff08;Andy Lau&#xff09;&#xff0c;1961年9月27日出生于中国香港&#xff0c;华语影视男演员、…

PHP安装使用教程

一、PHP 简介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛应用的开源服务器端脚本语言&#xff0c;尤其适用于 Web 开发&#xff0c;可嵌入 HTML 中使用。其运行速度快、易学易用&#xff0c;支持多种数据库和平台。 二、PHP 安装教程 2.1 支持平台 PHP 支…

ThreadLocal、InheritableThreadLocal与TransmittableThreadLocal深度解析

文章目录 一、概念说明1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 二、使用场景1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 三、存在的问题1、ThreadLocal2、InheritableThreadLocal3、TransmittableThreadLocal 四、示例…

ERP系统Bug记录

2025.06.30 2025/06/30-10:51:02 [http-nio-9999-exec-3] com.yxx.jsh.erp.service.LogService - 异常码[300],异常提示[数据查询异常],异常[{}] java.lang.NullPointerException: nullat com.yxx.jsh.erp.base.TableSupport.getBuildPageRequest(TableSupport.java:46)at com…

C# Avalonia 的 Source Generators 用处

C# Avalonia 的 Source Generators 用处 文章目录 **1. 自动生成 MVVM 绑定代码****2. 强类型 XAML 数据绑定****3. 自动注册视图&#xff08;View&#xff09;与视图模型&#xff08;ViewModel&#xff09;****4. 资源文件与本地化的强类型访问****5. 路由事件与命令的自动化处…