如何监控和优化 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 BY 或 ORDER 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.cnf或my.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 where、Using 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. 优化表结构
- 避免使用过大的字段类型(如
TEXT、BLOB)。 - 将大表拆分为多个小表(分表)。
- 使用分区表(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?二、如何监控慢 SQL?1. 启用慢查询日志启用方法:日志内容: 2. 使用 mysqldumpslow 分析日志 三、如何分析慢 SQL?1. 使用 EXPLAIN 分析执行计划使用方法&#x…...
13-二叉树最小深度-深度优先(DFS)
一、定义 什么是二叉树的最小深度? 二叉树的最小深度是指从根节点到最近的叶子节点的最短路径上的节点数。叶子节点是指没有子节点的节点。 举个例子: 1/ \2 3/ 4 这棵树的最小深度是 2,因为从根节点 1 到叶子节点 3 的路径最短&#x…...
51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)
接上篇的数码管静态显示,以下是接上篇介绍到的动态显示的原理。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选ÿ…...
代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!
1 代码自动完成 1.1 应用场景 在编辑文档时,为了提高编辑效率,编辑器一般都会带有自动完成功能,比如:输入括号时自动补全另一半,输入文字时,自动补全剩下的部分。 1.2 使用方法 1.2.1 自动缩进 单击主菜…...
电脑系统损坏,备份文件
一、工具准备 1.U盘:8G以上就够用,注意会格式化U盘,提前备份U盘内容 2.电脑:下载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注意力算子,通过对最大编码率降低( M C R 2 MCR^{2} MCR2)目标的变分形式进行展开优化得到&…...
Django 5实用指南(二)项目结构与管理
2.1 Django5项目结构概述 当你创建一个新的 Django 项目时,Django 会自动生成一个默认的项目结构。这个结构是根据 Django 的最佳实践来设计的,以便开发者能够清晰地管理和维护项目中的各种组件。理解并管理好这些文件和目录结构是 Django 开发的基础。…...
JAVA监听器(学习自用)
一、什么是监听器 servlet监听器是一种特殊的接口,用于监听特定的事件(如请求创建和销毁、会话创建和销毁、上下文的初始化和销毁)。 当Web应用程序中反生特定事件时,Servlet容器就会自动调用监听器中相应的方法来处理这些事件。…...
Ubuntu下mysql主从复制搭建
本文介绍mysql 8.4主从集群的搭建,从单个机器安装到集群的配置,整体走了一遍,希望对大家有帮助。mysql 8.4和之前的版本命令上有些变化,大家用来参考。 0、环境 ubuntu: 22.04mysql:8.4 1、安装mysql 1…...
VirtualBox 中使用 桥接网卡 并设置 MAC 地址
在 VirtualBox 中使用 桥接网卡 并设置 MAC 地址,可以按照以下步骤操作: 步骤 1:设置桥接网卡 打开 VirtualBox,选择你的虚拟机,点击 “设置” (Settings)。进入 “网络” (Network) 选项卡。在 “适配器 1” (Adapt…...
Ubuntu 20 掉显卡驱动的解决办法
目录 问题背景解决办法Step1:首先查看当前linux内核Step2:重启Step3:进入ubuntu advanced (即高级选项)Step4:查看有哪些linux内核Step5:如果滚回老板kernel还是没有驱动,就找到驱动…...
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 服务器 介绍: Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会开发。它实现了Java Servlet和JavaServer Pages (JSP) 技术,用于运行Java Web应用程序。Tomcat轻量、易于配置,常作为开发和部署…...
【RK3588嵌入式图形编程】-SDL2-构建模块化UI
构建模块化UI 文章目录 构建模块化UI1、概述2、创建UI管理器3、嵌套组件4、继承5、多态子组件6、总结在本文中,将介绍如何使用C++和SDL创建一个灵活且可扩展的UI系统,重点关注组件层次结构和多态性。 1、概述 在前面的文章中,我们介绍了应用程序循环和事件循环,这为我们的…...
面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址
Java机器学习的库与平台 最近听到有的人说要做机器学习就一定要学Python,我想他们掌握的知道还不够系统全面。本文作者给大家介绍几种常用Java实现的机器学习库,快快收藏加关注吧~ Java机器学习库表格 Java机器学习库整理库/平台概念适合场…...
基于YOLO11深度学习的心脏超声图像间隔壁检测分割与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分割、人工智能
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
ubuntu24基于虚拟机无法从主机拖拽文件夹
以下是解决问题的精简步骤: 安装 open-vm-tools-desktop: bash复制 sudo apt-get install open-vm-tools-desktop 重启虚拟机后,文字复制粘贴功能可正常工作。 禁用 Wayland: 编辑 /etc/gdm3/custom.conf 文件: bash复…...
常用Webpack Loader汇总介绍
引言 在前端项目开发中,Webpack 作为强大的模块打包工具,能够将各种资源进行打包处理。而其中的 Loader 则是 Webpack 处理不同类型文件的关键,它允许 Webpack 不仅仅局限于处理 JavaScript 文件,还能处理 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加速服务 特网科技
在互联网快速发展的今天,网站的加载速度对用户体验有着至关重要的影响,传统的网页加载方式依赖于服务器的性能和网络环境,这使得某些网站的页面加载时间过长,用户体验不佳,为了解决这个问题,许多企业开始采…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
