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

如何监控和优化 MySQL 中的慢 SQL

如何监控和优化 MySQL 中的慢 SQL

  • 前言
    • 一、什么是慢 SQL?
    • 二、如何监控慢 SQL?
      • 1. 启用慢查询日志
        • 启用方法:
        • 日志内容:
      • 2. 使用 `mysqldumpslow` 分析日志
    • 三、如何分析慢 SQL?
      • 1. 使用 `EXPLAIN` 分析执行计划
        • 使用方法:
        • 关键字段:
      • 2. 使用 `Performance Schema`
        • 启用方法:
        • 查询示例:
    • 四、如何优化慢 SQL?
      • 1. 添加索引
        • 示例:
        • 注意事项:
      • 2. 重写查询
        • 示例:
      • 3. 优化表结构
      • 4. 调整服务器参数
    • 五、定期维护和优化
      • 1. 定期优化表
      • 2. 定期审查慢查询日志
      • 3. 使用自动化工具
    • 六、总结


前言

MySQL 是广泛使用的关系型数据库,但随着数据量和查询复杂度的增加,性能问题逐渐显现,尤其是慢 SQL 查询。本文将介绍如何监控和优化 MySQL 中的慢 SQL,以提升数据库性能。


一、什么是慢 SQL?

慢 SQL 是指执行时间超过预设阈值的 SQL 查询。这类查询会消耗大量资源,影响数据库整体性能。常见的慢 SQL 问题包括:

  • 未使用索引导致的全表扫描
  • 复杂的 JOIN 或子查询
  • 不合理的 WHERE 条件
  • 大数据量的 GROUP BYORDER BY

二、如何监控慢 SQL?

1. 启用慢查询日志

慢查询日志是 MySQL 提供的记录慢 SQL 的工具。

启用方法:
  • 临时启用(重启后失效):

    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 1;  -- 设置慢查询阈值为1秒
    SET GLOBAL slow_query_log_file = '/path/to/slow_query.log';
    --SET GLOBAL slow_query_log_file = 'D:/software/mysql/test/slow_query.log';
    
  • 永久启用
    修改 MySQL 配置文件(my.cnfmy.ini):

    [mysqld]
    slow_query_log = 1
    slow_query_log_file = /path/to/slow_query.log
    long_query_time = 1
    
日志内容:

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

  • 执行时间
  • 执行语句
  • 锁等待时间
  • 扫描的行数

2. 使用 mysqldumpslow 分析日志

MySQL 提供了 mysqldumpslow 工具,用于分析慢查询日志:

mysqldumpslow /path/to/slow_query.log

该工具可以统计慢查询的出现次数、执行时间等信息,帮助快速定位问题。


三、如何分析慢 SQL?

1. 使用 EXPLAIN 分析执行计划

EXPLAIN 是 MySQL 提供的分析 SQL 执行计划的工具。通过它,可以了解 SQL 的执行方式,例如是否使用了索引、扫描了多少行数据等。

使用方法:
EXPLAIN SELECT * FROM your_table WHERE your_condition;
关键字段:
  • type:访问类型(如 ALL 表示全表扫描,index 表示索引扫描)。
  • key:使用的索引。
  • rows:扫描的行数。
  • Extra:额外信息(如 Using whereUsing temporary 等)。

2. 使用 Performance Schema

MySQL 的 Performance Schema 提供了更详细的性能监控数据,可以跟踪查询的执行时间、锁等待时间等。

启用方法:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';
查询示例:
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;

四、如何优化慢 SQL?

1. 添加索引

索引是优化 SQL 查询的最有效手段之一。通过为常用查询字段添加索引,可以显著减少扫描行数。

示例:
CREATE INDEX idx_name ON your_table(your_column);
注意事项:
  • 避免过度索引,索引会增加写操作的开销。
  • 使用复合索引时,注意字段顺序。

2. 重写查询

优化查询逻辑可以减少资源消耗。例如:

  • 使用 JOIN 替代子查询。
  • 避免在 WHERE 条件中使用函数或表达式。
  • 减少 **SELECT *** 的使用,只查询需要的字段。
示例:
-- 优化前
SELECT * FROM orders WHERE YEAR(order_date) = 2023;-- 优化后
SELECT * FROM orders WHERE order_date >= '2023-01-01' AND order_date < '2024-01-01';

3. 优化表结构

  • 避免使用过大的字段类型(如 TEXTBLOB)。
  • 将大表拆分为多个小表(分表)。
  • 使用分区表(Partitioning)优化大数据量查询。

4. 调整服务器参数

根据负载情况调整 MySQL 配置参数,例如:

  • innodb_buffer_pool_size:增加 InnoDB 缓冲池大小。
  • query_cache_size:启用查询缓存(适用于读多写少的场景)。
  • max_connections:增加最大连接数。

五、定期维护和优化

1. 定期优化表

使用 OPTIMIZE TABLE 命令减少表碎片:

OPTIMIZE TABLE your_table;

2. 定期审查慢查询日志

定期分析慢查询日志,发现潜在问题。

3. 使用自动化工具

借助第三方工具(如 Percona Toolkit、pt-query-digest)自动化监控和优化。


六、总结

监控和优化慢 SQL 是提升 MySQL 性能的关键步骤。通过启用慢查询日志、分析执行计划、优化查询语句和调整服务器参数,可以显著提升数据库性能。同时,定期维护和优化也是确保数据库长期稳定运行的重要措施。

希望本文能帮助你更好地理解和优化 MySQL 中的慢 SQL!

相关文章:

如何监控和优化 MySQL 中的慢 SQL

如何监控和优化 MySQL 中的慢 SQL 前言一、什么是慢 SQL&#xff1f;二、如何监控慢 SQL&#xff1f;1. 启用慢查询日志启用方法&#xff1a;日志内容&#xff1a; 2. 使用 mysqldumpslow 分析日志 三、如何分析慢 SQL&#xff1f;1. 使用 EXPLAIN 分析执行计划使用方法&#x…...

13-二叉树最小深度-深度优先(DFS)

一、定义 什么是二叉树的最小深度&#xff1f; 二叉树的最小深度是指从根节点到最近的叶子节点的最短路径上的节点数。叶子节点是指没有子节点的节点。 举个例子&#xff1a; 1/ \2 3/ 4 这棵树的最小深度是 2&#xff0c;因为从根节点 1 到叶子节点 3 的路径最短&#x…...

51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)

接上篇的数码管静态显示&#xff0c;以下是接上篇介绍到的动态显示的原理。 动态显示的特点是将所有位数码管的段选线并联在一起&#xff0c;由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选&#xff…...

代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!

1 代码自动完成 1.1 应用场景 在编辑文档时&#xff0c;为了提高编辑效率&#xff0c;编辑器一般都会带有自动完成功能&#xff0c;比如&#xff1a;输入括号时自动补全另一半&#xff0c;输入文字时&#xff0c;自动补全剩下的部分。 1.2 使用方法 1.2.1 自动缩进 单击主菜…...

电脑系统损坏,备份文件

一、工具准备 1.U盘&#xff1a;8G以上就够用&#xff0c;注意会格式化U盘&#xff0c;提前备份U盘内容 2.电脑&#xff1a;下载Windows系统并进行启动盘制作 二、Windows启动盘制作 1.微软官网下载启动盘制作工具微软官网下载启动盘制作工具https://www.microsoft.com/zh-c…...

Token Statistics Transformer:线性注意力革命,重新定义Transformer效率天花板

“TOKEN STATISTICS TRANSFORMER: LINEAR-TIME ATTENTION VIA VARIATIONAL RATE REDUCTION” 由Ziyang Wu等人撰写。文章提出一种新型Transformer注意力算子&#xff0c;通过对最大编码率降低&#xff08; M C R 2 MCR^{2} MCR2&#xff09;目标的变分形式进行展开优化得到&…...

Django 5实用指南(二)项目结构与管理

2.1 Django5项目结构概述 当你创建一个新的 Django 项目时&#xff0c;Django 会自动生成一个默认的项目结构。这个结构是根据 Django 的最佳实践来设计的&#xff0c;以便开发者能够清晰地管理和维护项目中的各种组件。理解并管理好这些文件和目录结构是 Django 开发的基础。…...

JAVA监听器(学习自用)

一、什么是监听器 servlet监听器是一种特殊的接口&#xff0c;用于监听特定的事件&#xff08;如请求创建和销毁、会话创建和销毁、上下文的初始化和销毁&#xff09;。 当Web应用程序中反生特定事件时&#xff0c;Servlet容器就会自动调用监听器中相应的方法来处理这些事件。…...

Ubuntu下mysql主从复制搭建

本文介绍mysql 8.4主从集群的搭建&#xff0c;从单个机器安装到集群的配置&#xff0c;整体走了一遍&#xff0c;希望对大家有帮助。mysql 8.4和之前的版本命令上有些变化&#xff0c;大家用来参考。 0、环境 ubuntu&#xff1a; 22.04mysql&#xff1a;8.4 1、安装mysql 1…...

VirtualBox 中使用 桥接网卡 并设置 MAC 地址

在 VirtualBox 中使用 桥接网卡 并设置 MAC 地址&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;设置桥接网卡 打开 VirtualBox&#xff0c;选择你的虚拟机&#xff0c;点击 “设置” (Settings)。进入 “网络” (Network) 选项卡。在 “适配器 1” (Adapt…...

Ubuntu 20 掉显卡驱动的解决办法

目录 问题背景解决办法Step1&#xff1a;首先查看当前linux内核Step2&#xff1a;重启Step3&#xff1a;进入ubuntu advanced &#xff08;即高级选项&#xff09;Step4&#xff1a;查看有哪些linux内核Step5&#xff1a;如果滚回老板kernel还是没有驱动&#xff0c;就找到驱动…...

EasyPoi系列之框架集成及基础使用

EasyPoi系列之框架集成及基础使用 1 EasyPoi1.1 gitee仓库地址 2 EasyPoi集成至SpringBoot2.1 maven引入jar包 3 EasyPoi Excel导出3.1 基于实体对象导出3.1.1 Excel 注解3.1.2 编写实体3.1.3 编写导出方法3.1.4 导出效果 3.2 基于模板导出3.2.1 编写模板文件3.2.2 编写导出方法…...

Web后端 Tomcat服务器

一 Tomcat Web 服务器 介绍&#xff1a; Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;由Apache软件基金会开发。它实现了Java Servlet和JavaServer Pages (JSP) 技术&#xff0c;用于运行Java Web应用程序。Tomcat轻量、易于配置&#xff0c;常作为开发和部署…...

【RK3588嵌入式图形编程】-SDL2-构建模块化UI

构建模块化UI 文章目录 构建模块化UI1、概述2、创建UI管理器3、嵌套组件4、继承5、多态子组件6、总结在本文中,将介绍如何使用C++和SDL创建一个灵活且可扩展的UI系统,重点关注组件层次结构和多态性。 1、概述 在前面的文章中,我们介绍了应用程序循环和事件循环,这为我们的…...

面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址

Java机器学习的库与平台 最近听到有的人说要做机器学习就一定要学Python&#xff0c;我想他们掌握的知道还不够系统全面。本文作者给大家介绍几种常用Java实现的机器学习库&#xff0c;快快收藏加关注吧&#xff5e; Java机器学习库表格 Java机器学习库整理库/平台概念适合场…...

基于YOLO11深度学习的心脏超声图像间隔壁检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

ubuntu24基于虚拟机无法从主机拖拽文件夹

以下是解决问题的精简步骤&#xff1a; 安装 open-vm-tools-desktop&#xff1a; bash复制 sudo apt-get install open-vm-tools-desktop 重启虚拟机后&#xff0c;文字复制粘贴功能可正常工作。 禁用 Wayland&#xff1a; 编辑 /etc/gdm3/custom.conf 文件&#xff1a; bash复…...

常用Webpack Loader汇总介绍

引言 在前端项目开发中&#xff0c;Webpack 作为强大的模块打包工具&#xff0c;能够将各种资源进行打包处理。而其中的 Loader 则是 Webpack 处理不同类型文件的关键&#xff0c;它允许 Webpack 不仅仅局限于处理 JavaScript 文件&#xff0c;还能处理 CSS、图片、字体等多种…...

剑指 Offer II 023. 两个链表的第一个重合节点

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20023.%20%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%87%8D%E5%90%88%E8%8A%82%E7%82%B9/README.md 剑指 Offer II 023. 两…...

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天&#xff0c;网站的加载速度对用户体验有着至关重要的影响&#xff0c;传统的网页加载方式依赖于服务器的性能和网络环境&#xff0c;这使得某些网站的页面加载时间过长&#xff0c;用户体验不佳&#xff0c;为了解决这个问题&#xff0c;许多企业开始采…...

从Elasticsearch到Milvus:深入聊聊BM25在现代向量检索中的角色与局限

BM25在现代向量检索生态中的定位与价值重构 当Milvus和Faiss的向量索引技术成为行业热点时&#xff0c;一个有趣的现象正在发生&#xff1a;几乎所有主流商业搜索引擎仍在混合使用BM25算法。这种看似矛盾的现状背后&#xff0c;隐藏着文本检索领域最深刻的工程智慧——没有完美…...

202613读书笔记|《世界经典爱情诗100首鉴赏》——在这涛惊浪险的生活海洋之中,你的终极目的就是我的航向

202613读书笔记|《世界经典爱情诗100首鉴赏》——在这涛惊浪险的生活海洋之中&#xff0c;你的终极目的就是我的航向 《世界经典爱情诗100首鉴赏》许自强主编&#xff0c;爱情诗是诗歌王冠上的一颗璀璨明珠。它可以使人如痴如醉&#xff0c;忘却一切&#xff0c;甚至令人疯狂&a…...

YOLO数据增强中的颜色抖动技术:原理、实现与工程实践深度解析

引言:颜色抖动——连接有限数据与无限视觉世界的桥梁 在深度学习驱动的目标检测领域,YOLO(You Only Look Once)系列模型以其卓越的实时性和精度平衡而著称。然而,模型的最终性能不仅取决于其精巧的网络架构,更依赖于训练数据的质量与多样性。颜色抖动(Color Jittering)…...

从短期利率到波动率:手把手用Python复现CIR模型,搞定金融时间序列模拟

从短期利率到波动率&#xff1a;手把手用Python复现CIR模型&#xff0c;搞定金融时间序列模拟 金融市场的波动性和利率变化常常让分析师们头疼不已。想象一下&#xff0c;你手头有一组历史利率数据&#xff0c;老板突然要求你预测未来半年可能出现的极端情景——这可不是靠直觉…...

3分钟掌握DamaiHelper:告别演唱会陪跑,轻松抢到心仪门票

3分钟掌握DamaiHelper&#xff1a;告别演唱会陪跑&#xff0c;轻松抢到心仪门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到演唱会门票而烦恼吗&#xff1f;DamaiHelper大麦抢票…...

RynnBrain模型:多模态强化学习在视觉语言导航中的应用

1. RynnBrain模型架构解析RynnBrain是一种基于强化学习的视觉语言导航(VLN)与空间推理模型&#xff0c;其核心创新在于将多模态理解与物理空间推理能力深度融合。模型采用三阶段架构设计&#xff1a;1.1 多模态编码层该层负责处理视觉和语言输入的双向对齐&#xff1a;视觉编码…...

3步解决视频卡顿问题:Flowframes AI插帧实战指南

3步解决视频卡顿问题&#xff1a;Flowframes AI插帧实战指南 【免费下载链接】flowframes Flowframes Windows GUI for video interpolation using DAIN (NCNN) or RIFE (CUDA/NCNN) 项目地址: https://gitcode.com/gh_mirrors/fl/flowframes 你是否曾为观看老旧电影时的…...

PHP 9.0异步I/O瓶颈在哪?5大真实生产环境AI聊天机器人崩溃日志溯源,附可复用的AsyncSignalHandler修复补丁

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PHP 9.0异步I/O架构演进与AI聊天机器人运行时特征 PHP 9.0 将原生引入协程驱动的异步 I/O 栈&#xff0c;彻底取代传统的 stream_select() 和 pcntl_fork 混合模型。核心变化在于将 Swoole 的成熟语义深…...

从‘跑字典’到‘跑掩码’:John the Ripper 增量与掩码模式详解,搞定那些有规律的‘强密码’

从‘跑字典’到‘跑掩码’&#xff1a;John the Ripper 增量与掩码模式详解 在渗透测试和密码安全评估中&#xff0c;我们常常遇到这样的场景&#xff1a;目标系统要求密码必须符合特定规则&#xff0c;比如"公司名年份特殊字符"的组合。这类密码看似复杂&#xff0c…...

紧急预警!2024年起欧盟新规强制要求车载C#中控支持uLTC时间同步——你还在用DateTime.Now?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;车载 C# 中控系统实时通信 现代智能座舱对中控系统的实时性、可靠性和低延迟提出严苛要求。C# 凭借其在 .NET 6 中对跨平台实时通信的深度优化&#xff08;如 System.IO.Pipelines 和 Memory 支持&…...