如何监控和优化 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!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一.数据治理理论架构

1、数据治理核心思想&#xff1a; 数据治理理论架构图描绘了一个由顶层设计、管控机制、核心领域和管理系统四个主要部分组成的数据治理框架。它旨在通过系统化的方法&#xff0c;解决数据治理机制缺失引发的业务和技术问题&#xff0c;并最终提升企业的数据管理水平。 数据治…

一键安装教程

有需要的可以私信 亮点&#xff1a; 不再需要安装完去配置环境变量&#xff0c;下载完程序&#xff0c;解压后&#xff0c;右键进行管理员安装&#xff0c;安装完毕自动配置环境变量&#xff0c;即可使用 Maven 安装 右键 以管理员身份运行点击 下一步安装完成后会同步配置环境…

crud项目分析(2)

JWT令牌验证是否登录成功 简单的验证账号密码是否正确(存在) 全局异常处理器 过滤器 因为login下只有这一个网页 唯一一种操作 package com.itheima.filter;import ch.qos.logback.core.util.StringUtil; import com.alibaba.fastjson.JSONObject; import com.itheima.pojo.R…

深入解析iOS视频录制(二):自定义UI的实现

深入解析 iOS 视频录制&#xff08;一&#xff09;&#xff1a;录制管理核心MWRecordingController 类的设计与实现 深入解析iOS视频录制&#xff08;二&#xff09;&#xff1a;自定义UI的实现​​​​​​​ 深入解析 iOS 视频录制&#xff08;三&#xff09;&#xff1a;完…

【Linux系统】生产者消费者模型:基于环形队列(信号量机制)

理论层面 1、环形队列的特性认识 环形队列采用数组模拟&#xff0c;用模运算来模拟环状特性 环形结构起始状态和结束状态都是⼀样的&#xff0c;不好判断为空或者为满&#xff0c;所以可以通过加计数器或者标记位来判断满或者空。另外也可以预留⼀个空的位置&#xff0c;作为…

【笔记】LLM|Ubuntu22服务器极简本地部署DeepSeek+API使用方式

2025/02/18说明&#xff1a;2月18日~2月20日是2024年度博客之星投票时间&#xff0c;走过路过可以帮忙点点投票吗&#xff1f;我想要前一百的实体证书&#xff0c;经过我严密的计算只要再拿到60票就稳了。一人可能会有多票&#xff0c;Thanks♪(&#xff65;ω&#xff65;)&am…

leetcode-414.第三大的数

leetcode-414.第三大的数 code review! 文章目录 leetcode-414.第三大的数一.题目描述二.代码提交 一.题目描述 二.代码提交 class Solution { public:int thirdMax(vector<int>& nums) {set<int> set_v(nums.begin(), nums.end());auto it set_v.rbegin()…

【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})

代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一种替代访问的方法&#xff0c;即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下&#xff0c;增加额外的功能&#xff0c;如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…

深度学习之图像回归(二)

前言 这篇文章主要是在图像回归&#xff08;一&#xff09;的基础上对该项目进行的优化。&#xff08;一&#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…

利用分治策略优化快速排序

1. 基本思想 分治快速排序&#xff08;Quick Sort&#xff09;是一种基于分治法的排序算法&#xff0c;采用递归的方式将一个数组分割成小的子数组&#xff0c;并通过交换元素来使得每个子数组元素按照特定顺序排列&#xff0c;最终将整个数组排序。 快速排序的基本步骤&#…

照片模糊怎么变清晰?图生生AI修图-一键清晰放大

当打开手机相册时&#xff0c;那些泛着噪点的合影、细节模糊的风景照、像素化的证件图片&#xff0c;让珍贵时刻蒙上遗憾的面纱。而专业级图像修复工具的门槛&#xff0c;让多数人只能无奈接受这些"不完美的记忆"。AI技术的发展&#xff0c;让普通用户也能轻松拥有专…

Linux 网络与常用操作(适合开发/运维/网络工程师)

目录 OSI 七层协议简介 应用层 传输层 Linux 命令&#xff01;&#xff01;&#xff01; 1. ifconfig 命令 简介 1. 查看网络地址信息 2. 指定开启、或者关闭网卡 3. 修改、设置 IP 地址 4. 修改机器的 MAC 地址信息 5. 永久修改网络设备信息 2. route 路由命令 …

PID控制学习

前言 本篇文章属于PID控制算法的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 PID入门教程-电机控制 倒立摆 持续更新中_哔哩哔哩_bilibili 一…

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式

第1期 定时器实现非阻塞式程序 按键控制LED闪烁模式 解决按键扫描&#xff0c;松手检测时阻塞的问题实现LED闪烁的非阻塞总结补充&#xff08;为什么不会阻塞&#xff09; 参考江协科技 KEY1和KEY2两者独立控制互不影响 阻塞&#xff1a;如果按下按键不松手&#xff0c;程序就…

【Arxiv 大模型最新进展】PEAR: 零额外推理开销,提升RAG性能!(★AI最前线★)

【Arxiv 大模型最新进展】PEAR: 零额外推理开销&#xff0c;提升RAG性能&#xff01;&#xff08;★AI最前线★&#xff09; &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 NLP Github 项目…

vscode的一些实用操作

1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容&#xff0c;即可跳转到相应位置。 使用ctrl p,然后输入指定的行号&#xff0c;回车即可跳转到相应行号位置。

OAI 平台 4G(LTE)基站 、终端、核心网 端到端部署实践(一)

本系列文章,基于OAI LTE代码搭建端到端运行环境,包含 eNB,EPC,UE三个网元。本小节先介绍系统总体架构,硬件平台及驱动安装方法。 1. Overview 系统总体架构如下图所示。 2 Machine setup 2.1 Machine specs Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS…

Linux环境Docker使用代理推拉镜像

闲扯几句 不知不觉已经2月中了&#xff0c;1个半月忙得没写博客&#xff0c;这篇其实很早就想写了&#xff08;可追溯到Docker刚刚无法拉镜像的时候&#xff09;&#xff0c;由于工作和生活上的事比较多又在备考软考架构&#xff0c;拖了好久…… 简单记录下怎么做的&#xf…

基于TI的TDA4高速信号仿真条件的理解 4.6

Application Note 《Jacinto7 AM6x, TDA4x, and DRA8x High-Speed Interface Design Guidelines》 4.6 Reviewing Simulation Results检查仿真结果 The results generated by the channel simulations outlined in the preceding sections are compared against an eye mask s…

unity学习46:反向动力学IK

目录 1 正向动力学和反向动力学 1.1 正向动力学 1.2 反向动力学 1.3 实现目标 2 实现反向动力 2.1 先定义一个目标 2.2 动画层layer&#xff0c;需要加 IK pass 2.3 增加头部朝向代码 2.3.1 专门的IK方法 OnAnimatorIK(int layerIndex){} 2.3.2 增加朝向代码 2.4 …