MySQL数据库调优————SQL性能分析
TIPS
本文基于MySQL 8.0
本文探讨如何深入SQL内部,去分析其性能,包括了三种方式:
- SHOW PROFILE
- INFORMATION_SCHEMA.PROFILING
- PERFORMANCE_SCHEMA
SHOW PROFILE
SHOW PROFILE是MySQL的一个性能分析命令,可以跟踪SQL各种资源消耗。使用格式如下:
SHOW PROFILE [type [,type] ... ][FOR QUERY n][LIMIT row_count [OFFSET offset]]
type:{ALL 显示所有信息| BLOCK IO 显示阻塞的输入输出次数| CONTEXT SWITCHES 显示自愿及非自愿的上下文切换次数| CPU 显示用户与系统CPU使用时间| IPC 显示消息发送与接收的次数| MEMORY 显示内存相关的开销,目前未实现此功能| PAGE FAULTS 显示页错误相关开销信息| SOURCE 列出相应操作对应的函数名及其在源码中的位置(行)| SWPS 显示swap交换次数
}
默认情况下,SHOW PROFILE只展示Status和Duration两列,如果想展示更多信息,可指定type。
使用步骤如下:
- 使用如下命令,查看是否支持SHOW PROFILE功能,yes表示支持。MySQL5.0.37开始,MySQL支持SHOW PROFILE。
select @@have_profiling;
- 查看当前是否启用了SHOW PROFILE,0表示未启用,1表示已启用
select @@profiling;
- 使用如下命令为当前会话开启或关闭性能分析,设成1表示开启,0表示关闭
set profiling = 1;
- 使用SHOWPROFILS命令,可为最近发送的SQL语句做一个概要的性能分析。展示的条目数由profiling_history_size会话变量控制,该变量的默认值是15,最大值为100.将值设置为0具有禁用分析的实际效果。
-- 默认展示15条
show profiles;
-- 使用profiling_history_size调整展示的条目数
set profiling_history_size = 100;
- 使用show profile分析指定查询:
SHOW PROFILES;
SHOW PROFILE;
默认情况下,只展示Status和Duration两列,如果想展示更多信息,可指定type。
SHOW PROFILE FOR QUERY 154;
展示CPU相关的开销
SHOW PROFILE CPU FOR QUERY 184;
分析完成后,记得关掉SHOW PROFILE功能;
TIPS
- MySQL官方文档申明SHOW PROFILE已被废弃,并建议使用PerforMance Schema作为代替品。
- 在某些系统上,性能分析只有部分功能可用。比如,部分功能在Windows系统下无效(show profile使用了getrusage()这个API,而在Windows系统上将会返回false,因为Windows不支持这个API);此外,性能分析是进程级的,而不是线程级的,这就意味着其他线程的活动可能会影响到一看到的计时信息。
INFORMATION_SCHEMA.PROFILING
INFORMATION_SCHEMA.PROFILING用来做性能分析,它的内容对应SHOW PROFILE和SHOW PROFILES语句产生的信息。除非设置了set profiling = 1否则该表不会有任何数据。该表包括以下字段:
- QUERY_ID:语句的唯一标识
- SEQ:一个序号,展示具有相同QUERY_ID值的行的显示顺序
- STATE:分析状态
- DURATION:在这个状态下持续了多久(秒)
- CPU_USER,CPU_SYSTEM:用户和系统CPU使用情况(秒)
- CONTEXT_VOLUNTARY,CONTEXT_INVOLUNTARY:发生了多少次自愿和非自愿的上下文切换
- BLOCK_OPS_IN,BLOCK_OPS_OUT:块输入和输出操作的数量
- MESSAGES_SENT,MESSAGES_RECEIVED:发送和接收的消息数
- PAGE_FAULTS_MAJOR,PAGE_FAULTS_MINOR:主要和次要的页错误信息
- SWAPS:发生了多少SWAP
- SOURCE_FUNCTION,SOURCE_FILE,SOURCE_LINE:当前状态实在源码的哪里执行的
TIPS
- SHOW PROFILE本质上使用的也是INFORMATION_SCHEMA.PROFILING表;
- INFORMATION_SCHEMA.PROFILING表已被废弃,在未来可能会被删除。未来将可使用Performance Schema替代。
- 下面两个SQL是等价的:
SHOW PROFILE FOR QUERY 1;
SELECT STATE,FORMAT(DURATION,6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1 ORDER BY SEQ;
PERFORMANCE_SCHEMA
PERFORMANCE_SCHEMA是MySQL建议的性能分析方式,未来SHOW PROFILE,INFORMATION_SCHEMA.PROFILING都会废弃。PERFORMANCE_SCHEMA在MySQL5.6引入,因此,在此之上的更高的版本才能使用。可使用**SHOW VARIABLES LIKE ‘performance_schema’;**查看启用情况,MySQL5.7开始默认启用。
下面来用PERFORMANCE_SCHEMA去实现SHOW PROFILE类似的效果:
- 查看是否开启性能监控
SELECT * FROM performance_schema.setuo_actors;
默认是开启的。
- 也可以执行类似如下的SQL语句,只监控指定用户执行的SQL:
UPDATE performance_schema.setup_actors SET ENABLED = 'NO',HISTORY = 'NO' WHERE HOST = '%' AND USER = '%';INSERT INTO performance_schema.setup_actors (HOST,USER,ROLE,ENABLED,HISTORY) VALUE
('localhost','test_user','%','YES','YES');
这样,就只会监控localhost服务器上test_user用户发送过来的SQL。其他服务器、其他用户发过来的SQL统统不监控。
- 执行如下SQL语句,开启相关监控项:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES',TIMED = 'YES' WHERE NAME LIKE '%statement/%';UPDATE performance_schema.setup_instruments SET ENABLED = 'YES',TIMED = 'YES' WHERE NAME LIKE '%stage/%';UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_statements_%';UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_stages_%';
- 使用开启监控的用户,执行SQL语句,比如:
select * from employees where emp_no = '10001';
- 执行如下SQL,获得语句的EVENT_ID:
SELECT EVENT_ID,TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration,SQL_TEXT
FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT LIKE '%10001%';
这一步类似于SHOW PROFILES。
- 执行如下SQL语句做性能分析,这样就可以知道这条语句各个阶段的信息了。
SELECT event_name AS State,TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
FROM performance_schema.events_stages_history_long
WHERE NESTING_EVENT_ID = 869;
相关文章:

MySQL数据库调优————SQL性能分析
TIPS 本文基于MySQL 8.0 本文探讨如何深入SQL内部,去分析其性能,包括了三种方式: SHOW PROFILEINFORMATION_SCHEMA.PROFILINGPERFORMANCE_SCHEMA SHOW PROFILE SHOW PROFILE是MySQL的一个性能分析命令,可以跟踪SQL各种资源消耗。…...

sql数据库高级编程总结(一)
1、数学函数:操作一个数据,返回一个结果 (1)取上限 ceiling 如果有一个小数就取大于它的一个最小整数 列如9.5 就会取到 10 select code,name,ceiling(price) from car (2)取下限 floor 如果有一个小数就…...

软件工程(5)--喷泉模型
前言 这是基于我所学习的软件工程课程总结的第五篇文章。 迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。 一般说来,使用…...
SM2数字签名
文章目录6. 签名流程7. 验签流程实现参考资料6. 签名流程 M’ ZA || Msge Hash(M’),并转为大数;生成随机数k,范围0<k<n;计算kG (x1, y1)r (e x1) mod n, 若r0或(rkn)则重新生成k;s (k-rd) / (1d) mod n&…...

RPA+保险后台部门擦出不一样“火花” | RPA案例
在保险行业中,后台业务线主要是为前台和中台等提供支持,提供公司整体运营服务,包括财务、信息、人力、综合办等。相对于中前台部门,后台部门离核心价值链更远一些,更偏支持部门,其中某些岗位与业务相关度强…...
设备树相关概念的理解
设备树 定义 设备树是描述硬件信息的一种树形结构,设备树文件会在内核启动后被内核解析得到对应设备的具体信息。 树形结构就自然会存在节点,硬件设备信息就存储再设备树中的节点上,即设备节点。而一个设备节点中可以存储硬件的多个不同属性…...

ubuntu20.04下配置深度学习环境GPU
卸载子系统 C:\Users\thzn>wsl --list 适用于 Linux 的 Windows 子系统分发版: docker-desktop (默认) docker-desktop-data Ubuntu-18.04 Ubuntu-22.04 Ubuntu-20.04 C:\Users\thzn>wsl --unregister Ubuntu-18.04 ubuntu 换源 https://www.cnblogs.com/Horizon-asd/p…...
用egg.js来写一个api管理系统(一)
Egg.js是一个基于Node.js的企业级开发框架,非常适合构建API服务。 安装egg.js 首先,您需要安装Node.js和npm(Node Package Manager)。然后,您可以通过运行以下命令来安装Egg.js: npm i egg --save然后&a…...

企业数字化转型和升级:架构设计方法与实践
目录 企业架构整体结构 企业架构的驱动力 企业架构的基本概念 企业架构的发展 企业架构框架理论 主流企业架构框架之对比 企业架构整体结构 图例:企业架构整体结构 企业架构整体结构从战略层、规划层、落地层这三层来分别对应企业架构中 业务、架构和实施的各种重要…...

【LeetCode】环形链表 II [M](链表)
142. 环形链表 II - 力扣(LeetCode) 一、题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链…...
Unity之如何实现一个VR任务(剧情)系统
一.前言 最近再做一个VR项目,里面有大量的剧情和VR操作任务。 比如: 1.张三说了什么话,干了什么事,然后,李四又说了什么,做了什么动画,完了之后,场景中某个物体高亮,让我们触摸或者射线点击(pc的话鼠标点击)和其发生交互。 2.我们使用VR手柄或者鼠标与场景中的一个…...

k8s核心概念与kubectl命令行工具的使用
k8s官方文档Kubernetes 文档 | Kubernetes作用:kubernetes用于容器化应用程序的部署,扩展和管理。目标:是让部署容器化应用简单高效。Kubernetes集群架构与组件 Master组件 kube-apiserverkubernetes API,集群的统一入口ÿ…...

【零基础入门前端系列】—无序列表、有序列表、定义列表(四)
一、HTML无序列表 无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记。 无序列表使用 <ul> 标签 <ul> <li>Coffee</li> <li>Milk</li> </ul>嵌套结构: <…...

为什么重写equals还要重写hashcode方法
目录equals方法hashCode方法为什么要一起重写?总结面试如何回答重写 equals 时为什么一定要重写 hashCode?要想了解这个问题的根本原因,我们还得先从这两个方法开始说起。 以下是关于hashcode的一些规定: 两个对象相等࿰…...

电子技术——电流镜负载的差分放大器
电子技术——电流镜负载的差分放大器 目前我们学习的差分放大器都是使用的是差分输出的方式,即在两个漏极之间获取电压。差分输出主要有以下优势: 降低了共模信号的增益,提高了共模抑制比。降低了输入偏移电压。提升了差分输入的增益。 由于…...
go面试题
1.json包在使用的时候,结构体里的变量不加tag能不能正常转成json里的字段? 如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。 不加tag,可以正常转为j…...

攻防世界-Confusion1
题目 访问题目场景 某天,Bob说:PHP是最好的语言,但是Alice不赞同。所以Alice编写了这个网站证明。在她还没有写完的时候,我发现其存在问题。(请不要使用扫描器) 然后结合图片我们知道,这个网址是python写的࿰…...

机器学习实战--梯度下降法进行波士顿房价预测
前言: Hello大家好,我是Dream。 今天来学习一下如何使用机器学习梯度下降法进行波士顿房价预测,这是简单的一个demo,主要展示的是一些小小的思路~ 本文目录:一、波士顿房价预测1.全部的数据可视化2.地理数据可视化3.房…...

黑马】后台管理-项目优化和上线
一。项目优化优化1,加载进度条显示安装一个运行依赖,nprogress然后导包,调用对象展示和隐藏在main中基于拦截器实现展示进度条和隐藏进度条的效果如果触发请求拦截器,证明发起请求,希望展示进度条,如果触发…...
Web 框架 Flask 快速入门(三)数据库-MySQL
课程地址:Python Web 框架 Flask 快速入门 文章目录数据库1、数据库的安装与配置2、数据库的简单使用——增删改1. 定义数据模型2. 增删改3、 关系引用——表的关联4、查询——通过SQLAlchemy扩展5、其他1. 数据模型的实现(疑惑)6、Bug记录1.…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...