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

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’)&#xff0c;并转为大数&#xff1b;生成随机数k&#xff0c;范围0<k<n&#xff1b;计算kG (x1, y1)r (e x1) mod n, 若r0或(rkn)则重新生成k&#xff1b;s (k-rd) / (1d) mod n&…...

RPA+保险后台部门擦出不一样“火花” | RPA案例

在保险行业中&#xff0c;后台业务线主要是为前台和中台等提供支持&#xff0c;提供公司整体运营服务&#xff0c;包括财务、信息、人力、综合办等。相对于中前台部门&#xff0c;后台部门离核心价值链更远一些&#xff0c;更偏支持部门&#xff0c;其中某些岗位与业务相关度强…...

设备树相关概念的理解

设备树 定义 设备树是描述硬件信息的一种树形结构&#xff0c;设备树文件会在内核启动后被内核解析得到对应设备的具体信息。 树形结构就自然会存在节点&#xff0c;硬件设备信息就存储再设备树中的节点上&#xff0c;即设备节点。而一个设备节点中可以存储硬件的多个不同属性…...

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的企业级开发框架&#xff0c;非常适合构建API服务。 安装egg.js 首先&#xff0c;您需要安装Node.js和npm&#xff08;Node Package Manager&#xff09;。然后&#xff0c;您可以通过运行以下命令来安装Egg.js&#xff1a; npm i egg --save然后&a…...

企业数字化转型和升级:架构设计方法与实践

目录 企业架构整体结构 企业架构的驱动力 企业架构的基本概念 企业架构的发展 企业架构框架理论 主流企业架构框架之对比 企业架构整体结构 图例&#xff1a;企业架构整体结构 企业架构整体结构从战略层、规划层、落地层这三层来分别对应企业架构中 业务、架构和实施的各种重要…...

【LeetCode】环形链表 II [M](链表)

142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 一、题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链…...

Unity之如何实现一个VR任务(剧情)系统

一.前言 最近再做一个VR项目,里面有大量的剧情和VR操作任务。 比如: 1.张三说了什么话,干了什么事,然后,李四又说了什么,做了什么动画,完了之后,场景中某个物体高亮,让我们触摸或者射线点击(pc的话鼠标点击)和其发生交互。 2.我们使用VR手柄或者鼠标与场景中的一个…...

k8s核心概念与kubectl命令行工具的使用

k8s官方文档Kubernetes 文档 | Kubernetes作用&#xff1a;kubernetes用于容器化应用程序的部署&#xff0c;扩展和管理。目标&#xff1a;是让部署容器化应用简单高效。Kubernetes集群架构与组件 Master组件 kube-apiserverkubernetes API&#xff0c;集群的统一入口&#xff…...

【零基础入门前端系列】—无序列表、有序列表、定义列表(四)

一、HTML无序列表 无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点&#xff08;典型的小黑圆圈&#xff09;进行标记。 无序列表使用 <ul> 标签 <ul> <li>Coffee</li> <li>Milk</li> </ul>嵌套结构&#xff1a; <…...

为什么重写equals还要重写hashcode方法

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

电子技术——电流镜负载的差分放大器

电子技术——电流镜负载的差分放大器 目前我们学习的差分放大器都是使用的是差分输出的方式&#xff0c;即在两个漏极之间获取电压。差分输出主要有以下优势&#xff1a; 降低了共模信号的增益&#xff0c;提高了共模抑制比。降低了输入偏移电压。提升了差分输入的增益。 由于…...

go面试题

1.json包在使用的时候&#xff0c;结构体里的变量不加tag能不能正常转成json里的字段&#xff1f; 如果变量首字母小写&#xff0c;则为private。无论如何不能转&#xff0c;因为取不到反射信息。如果变量首字母大写&#xff0c;则为public。 不加tag&#xff0c;可以正常转为j…...

攻防世界-Confusion1

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

机器学习实战--梯度下降法进行波士顿房价预测

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

黑马】后台管理-项目优化和上线

一。项目优化优化1&#xff0c;加载进度条显示安装一个运行依赖&#xff0c;nprogress然后导包&#xff0c;调用对象展示和隐藏在main中基于拦截器实现展示进度条和隐藏进度条的效果如果触发请求拦截器&#xff0c;证明发起请求&#xff0c;希望展示进度条&#xff0c;如果触发…...

Web 框架 Flask 快速入门(三)数据库-MySQL

课程地址&#xff1a;Python Web 框架 Flask 快速入门 文章目录数据库1、数据库的安装与配置2、数据库的简单使用——增删改1. 定义数据模型2. 增删改3、 关系引用——表的关联4、查询——通过SQLAlchemy扩展5、其他1. 数据模型的实现&#xff08;疑惑&#xff09;6、Bug记录1.…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...