2.索引:SQL 性能分析详解
SQL性能分析是数据库优化中重要的一环。通过分析SQL的执行频率、慢查询日志、PROFILE工具以及EXPLAIN命令,能够帮助我们识别出数据库性能的瓶颈,并做出有效的优化措施。以下将详细讲解这几种常见的SQL性能分析工具和方法。
一、SQL 执行频率
SQL执行频率的分析可以帮助我们了解数据库的负载情况,识别高频SQL语句,找出可能的性能瓶颈。
1.1 功能含义
SQL执行频率表示每种类型SQL语句的执行次数。了解这些语句的执行频率有助于优化系统的性能。频繁执行的SQL可能是系统的核心查询,也可能是重复无效的查询。
1.2 查看SQL执行频率的指令
MySQL提供了一系列状态变量,可以用于查看SQL的执行频率。我们可以通过以下命令查看:
SHOW [GLOBAL|SESSION] STATUS LIKE 'Com_%';
如:
show global status like 'Com_______'
此命令会返回当前MySQL实例中每类SQL语句的执行次数。例如:
- 下面查询 Com_selec为:137次,查询操作偏多
| Variable_name | Value | |
|---|---|---|
| 1 | Com_binlog | 0 |
| 2 | Com_commit | 0 |
| 3 | Com_delete | 2 |
| 4 | Com_import | 0 |
| 5 | Com_insert | 3 |
| 6 | Com_repair | 0 |
| 7 | Com_revoke | 0 |
| 8 | Com_select | 137 |
| 9 | Com_signal | 0 |
| 10 | Com_update | 0 |
| 11 | Com_xa_end | 0 |
注:
Com_select:SELECT语句的执行次数Com_insert:INSERT语句的执行次数Com_update:UPDATE语句的执行次数Com_delete:DELETE语句的执行次数
1.3 查询内容的含义
这些状态变量显示了不同类型SQL语句的执行频率,有助于我们了解数据库的负载特征。例如,频繁的SELECT语句可能暗示需要优化查询或增加缓存,而频繁的INSERT、UPDATE和DELETE语句则表明系统中有大量写操作。
1.4 对频率内容进行分析
分析SQL执行频率可以帮助我们识别潜在的性能瓶颈。例如:
- 高频
SELECT:需要检查索引、查询优化和缓存策略; - 高频
INSERT、UPDATE:需要检查事务管理、锁机制和写性能优化; - 高频
DELETE:可能涉及数据清理策略,需要防止锁竞争和表碎片问题。
二、慢查询日志
慢查询日志用于记录执行时间超过设定阈值的SQL语句,有助于定位低效的查询。
2.1 功能含义
慢查询日志记录了执行较慢的SQL语句。通过分析这些日志,可以找出性能瓶颈并优化查询效率。
2.2 检查慢查询日志是否开启
可以通过以下命令查看是否已启用慢查询日志:
SHOW VARIABLES LIKE 'slow_query_log';
返回结果中,若slow_query_log为ON,表示慢查询日志已启用。
2.3 设置和开启慢查询日志
若慢查询日志未开启,可用以下命令启用:
SET GLOBAL slow_query_log = 'ON';
设定慢查询的时间阈值,可以通过如下命令调整:
SET GLOBAL long_query_time = 2; -- 设置为2秒
若需永久生效,可在MySQL配置文件my.cnf中添加以下内容:位置:etc/my.cnf
slow_query_log = ON
long_query_time = 1
如图:

2.4 查看慢查询日志文件位置
使用以下命令查看慢查询日志文件位置:
SHOW VARIABLES LIKE 'slow_query_log_file';
如:

2.5 慢查询日志的内容案例
慢查询日志记录了每条慢查询的SQL语句、执行时间、锁等待时间等信息。示例如下:
# Time: 2024-11-08T12:00:00.000000Z
# Query_time: 2.000 Lock_time: 0.000 Rows_sent: 500 Rows_examined: 100000
SELECT * FROM orders WHERE customer_id = 1;
其中:
Query_time:查询执行时间。Lock_time:锁等待时间。Rows_sent:返回的行数。Rows_examined:扫描的行数。- 以及对应:
执行的sql
该示例中的查询扫描了10万行数据,但只返回了500行,可能需要优化。
三、PROFILE
PROFILE工具是MySQL用于分析SQL语句执行过程的性能分析工具,可以显示每个SQL语句在执行的各个阶段所消耗的时间。
3.1 功能含义
PROFILE能够精确到毫秒级别记录SQL执行过程的各个步骤,比如解析、优化、锁等待和执行时间等,有助于精确定位性能瓶颈。
3.2 检查是否支持PROFILE
首先,检查MySQL是否支持PROFILE功能:
SHOW VARIABLES LIKE 'have_profiling';
或
SELECT @@have_profiling ;
若返回值为YES,表示支持PROFILE。
注:支持不一定开启了
- 检查是否开启:
SELECT @@profiling若结果为0,表示没有开启,则需要进行设置开启
- 开启
PROFILESET profiling = 1; -- 开启Profiling
3.3 使用PROFILE分析SQL
启用PROFILE并执行分析的步骤如下:
-- 执行待分析的SQL语句
SELECT * FROM orders WHERE customer_id = 1;-- 查看profiling
SHOW PROFILES;-- 查看该语句执行过程的各个阶段时间开销
SHOW PROFILE FOR QUERY 1;
注:在
SHOW PROFILE FOR QUERY 1;语句中,1代表执行的第一个查询(按执行顺序排列)。
可以使用以下命令列出所有已执行的查询ID及其执行时间:SHOW PROFILES;
3.4 PROFILE结果的解析
SHOW PROFILE输出示例如下:
| Status | Duration | |
|---|---|---|
| 1 | starting | 0.0001 |
| 2 | checking permissions | 0.00002 |
| 3 | Opening tables | 0.00005 |
| 4 | init | 0.00003 |
| 5 | optimizing | 0.00003 |
| 6 | statistics | 0.00008 |
| 7 | preparing | 0.00004 |
| 8 | executing | 0.0015 |
| 9 | Sending data | 0.0025 |
| 10 | end | 0.0001 |
| 11 | query end | 0.00002 |
各阶段的时间开销有助于我们分析SQL的瓶颈。例如,如果Sending data耗时较长,可能是由于查询结果数据量大、网络延迟等原因所致。
四、EXPLAIN
EXPLAIN命令可以展示MySQL执行查询的计划,帮助分析查询性能和确定优化方向。
4.1 功能含义
EXPLAIN提供了SQL查询的执行计划,展示了MySQL是如何处理查询的,包括使用的索引、扫描行数和连接类型等。通过EXPLAIN结果,可以更好地了解查询的性能情况。
4.2 EXPLAIN的语法
基本语法如下:
EXPLAIN SELECT * FROM orders WHERE customer_id = 1;
4.3 EXPLAIN结果解析
EXPLAIN结果的关键字段说明如下:
| 字段 | 含义 |
|---|---|
id | 查询的执行顺序,id值越大优先级越高,表示先执行。 |
select_type | 查询类型(如SIMPLE表示简单查询,PRIMARY表示主查询,SUBQUERY表示子查询)。 |
table | 查询的表。 |
type | 连接类型,指明表的访问方式,如ALL(全表扫描)、index(索引扫描)、range(范围扫描)、ref(引用索引)。从性能级别来看:null > system > const > eq_ref > ref > range > index > all |
possible_keys | 查询中可能使用的索引。 |
key | 实际使用的索引。 |
key_len | 使用的索引长度,表示MySQL在查询中实际用到的字节数。 |
ref | 显示哪一列或常量与key关联。 |
rows | MySQL估计查询过程中需要读取的行数。 |
Extra | 额外信息,显示MySQL在执行查询时的额外操作,如Using where表示使用了WHERE条件,Using index表示使用覆盖索引。 |
注:对应type字段:从性能级别来看,null > system > const > eq_ref > ref > range > index > all
相关文章:
2.索引:SQL 性能分析详解
SQL性能分析是数据库优化中重要的一环。通过分析SQL的执行频率、慢查询日志、PROFILE工具以及EXPLAIN命令,能够帮助我们识别出数据库性能的瓶颈,并做出有效的优化措施。以下将详细讲解这几种常见的SQL性能分析工具和方法。 一、SQL 执行频率 SQL执行频率…...
Flink SQL
进入 JobManager 容器: docker exec -it 21442d9ca797 /bin/bash 启动 Flink 的 SQL 客户端: /opt/flink/bin/sql-client.sh embedded 尝试创建 Kafka 表: 在启动的 SQL 客户端中,尝试创建一个 Kafka 表,看看是否能…...
鸿蒙UI开发——实现环形文字
1、背 景 有朋友提问:您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么,还是需要通过其他方式来实现。 针对这位粉丝朋友的提问,我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…...
QT版发送邮件程序
简单的TCP邮箱程序 **教学与实践目的:**学会网络邮件发送的程序设计技术。 1.SMTP协议 邮件传输协议包括 SMTP(简单邮件传输协议,RFC821)及其扩充协议 MIME; 邮件接收协议包括 POP3 和功能更强大的 IMAP 协议。 服务…...
JavaSE:初识Java(学习笔记)
java是高级语言的面向对象语言 .[最贴近生活.最快速分析和设计程序] 一,计算机语言发展历史 二,Java体系结构 1,JavaSE(Java Standard Edition) 标准版,定位在个人计算机上的应用 这个版本是Jav…...
ClickHouse创建分布式表
ClickHouse创建分布式表 当数据量剧增的时候,clickhouse是采用分片的方式进行数据的存储的,类似于redis集群的实现方式。然后想进行统一的查询的时候,因为涉及到多个本地表,可以通过分布式表的方式来提供统一的入口。由于是涉及到…...
Flink转换算子
Apache Flink 是一个用于处理无界和有界数据的开源流处理框架。在 Flink 中,转换(Transformation)是数据流处理的核心组件之一,它们定义了如何从输入数据集生成输出数据集。以下是 Flink 中一些常见的转换算子: Map: 将…...
ThinkBook 14+ 2024 Ubuntu 触控板失效 驱动缺失问题解决
首先我的电脑是thinkbook14 2024,从ubuntu18到ubuntu24,笔者整个都试了一遍,触摸板都没反应,确认不是linux系统内核问题,原因为驱动缺失。 解决步骤: (1)下载驱动,网址如…...
【青牛科技】应用方案 | D75xx-150mA三端稳压器
概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器,但它们可以与外部元件一起使用&…...
WPF之iconfont(字体图标)使用
1,前文: WPF的Xaml是与前端的Html有着高度相似性的标记语言,所以Xaml也可同Html一般轻松使用阿里提供的海量字体图标,从而有效的减少开发工作度。 2,下载字体图标: 登录阿里图标库网iconfont-阿里巴巴矢量…...
08、Java学习-面向对象中级:
Java学习第十二天——面向对象中级: IDEA: 创建完新项目后,再src里面创建.java文件进行编写。 src——存放源码文件(.java文件);out——存放编译后的字节码文件(.class文件) 在I…...
springboot集成onlyoffice(部署+开发)
前言 最近有个项目需求是实现前端页面可以对word文档进行编辑,并且可以进行保存,于是一顿搜索,找到开源第三方onlyoffice,实际上onlyOffice有很多功能,例如文档转化、多人协同编辑文档、文档打印等,我们只用…...
LabVIEW编程基础教学(二)--数据类型
在LabVIEW中,数据类型是非常重要的基本概念,因为它们决定了如何存储和操作数据。掌握这些基础数据类型对于编写有效的程序非常关键。以下是LabVIEW中的基础数据类型介绍: 1. 数值类型(Numeric) 整型(Inte…...
「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用
本篇将带你实现一个多选问卷小应用,用户可以勾选选项并点击提交按钮查看选择的结果。通过本教程,你将学习如何使用 Checkbox 组件、动态渲染列表、状态管理及用户交互,构建完整的应用程序。 关键词 UI互动应用Checkbox 组件状态管理动态列表…...
Flutter中文字体设置指南:打造个性化的应用体验
在使用Flutter进行开发时,可能会遇到中文字体显示不正常或者字体不符合设计需求的情况。Flutter默认的中文字体往往无法满足某些用户对个性化和美观的需求。今天,我们就来详细探讨如何在Flutter应用中设置中文字体,并结合不同场景提供相应的解…...
git下载慢下载不了?Git国内国外下载地址镜像,git安装视频教程
git安装下载的视频教程在这 3分钟完成git下载和安装,git国内外下载地址镜像,Windows为例_哔哩哔哩_bilibili 一、Git安装包国内和国外下载地址镜像 1.1国外官方下载地址 打开Git的官方网站:Git官网下载页面。在页面上选择对应的系统&…...
安卓属性动画插值器(Interpolator)详解
属性动画(Property Animation)是 Android 中一个强大的动画框架,允许开发者对视图的任意属性(如位置、透明度、尺寸、颜色等)进行平滑的动态变化。插值器(Interpolator)作为属性动画的一部分&am…...
OSPF总结
1.定义及相关信息 (1)全称:Open ShortestPath First,开放式最短路径优先 (2)是一种基于链路状态算法的路由协议 (3)目前针对IPv4协议使用的是OSPF Version2(RFC2328) 目前针对IPv6 协议使用的是 OSPF Version3 ( RFC2740 ) (4)运行 OSPF 路由器之间…...
Spring Boot驱动的多维分类知识管理系统
1 绪论 1.1 研究背景 在这个推荐个性化的时代,采用新技术开发一个多维分类的知识管理系统来分享和展示内容是一个永恒不变的需求。本次设计的多维分类的知识管理系统有管理员和用户两个角色。 管理员可以管理用户信息,知识分类,知识信息等&am…...
CSS教程(七)- 背景
介绍 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1 背景颜色 属性名:background-color 作用:指定HTML元素的背景色。 取值:英文颜色、16进制、rgb、rgba、transparent(一般为透明&#…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
