MySQL查询性能剖析

MySQL之查询性能剖析与优化全攻略 大家好!一直以来,我都盼着能和各位在技术领域共同学习、共同进步。在MySQL的使用过程中,查询性能优化可是个关键问题,它直接关系到整个系统的运行效率。今天,咱们就深入研究一下MySQL查询性能剖析的相关知识,希望能帮大家掌握优化查询性能的方法,在技术道路上更进一步。 阅读详情

本文为《高性能MySQL(第三版)》一书的摘要总结

性能剖析一般分为两步:

  1. 测量任务所花费时间
  2. 对结果进行统计和排序,将重要的任务排在前面

性能剖析工具的工作方式:

  1. 在任务开始时启动计时器
  2. 在任务结束时停止解释器
  3. 结束时间减开始时间得到 响应时间

任务剖析报告:每行记录一个任务,包括任务名称,任务的执行时间、任务的消耗时间、任务的平均执行时间以及该任务执行时间占全部时间的百分比。

剖析MySQL查询

慢查询

慢查询日志可以帮助我们剖析并找出代价高的查询。

查看是否开启慢查询日志

mysql> show variables like '%show_query_log%';
Variable_nameValue
slow_query_logOFF
slow_query_log_file/var/lib/mysql/localhost-slow.log
  • 通过set开启记录慢查询日志(服务器重启后失效):
mysql> set global slow_query_log=1;

查看哪些慢查询会被记录:

mysql> show variables like 'long_query_time';
Variable_nameValue
long_query_time10.000000

上面的结果表示查询时间超过10秒的SQL会被就到慢查询日志中。
我们也可以通过set对该参数进行调整。

然后我们就可以使用pt-query-digest 这样的工具来剖析慢查询日志了,工具的安装方法可参考博客:https://www.cnblogs.com/zishengy/p/6852280.html

生成的剖析结果:

剖析单条查询

Show Profile

开启PROFILE:

mysql> set profiling = 1;

开启之后,在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关的数据。

mysql>select * from employees e ;
mysql>show profiles;

在执行一个查询之后,通过show profiles来查看该查询的Query_ID:

Query_IDDurationQuery
   1|  0.000094|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SET SQL_SELECT_LIMIT=DEFAULT          |
   2| 0.0000795|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SHOW WARNINGS                         |
   3|0.00011425|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SELECT DATABASE()                     |
   4|   0.00034|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / select * from employees e LIMIT 0, 200|
   5|  0.000078|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SHOW WARNINGS                         |
   6|0.00011425|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SELECT DATABASE()                     |
   7|0.00009525|/* ApplicationName=DBeaver 7.1.0 - SQLEditor <Script.sql> * / SET SQL_SELECT_LIMIT=200              |

然后查看单条查询语句的具体剖析结果:

mysql>show profile for query 4;
StatusDuration
starting0.000060
Executing hook on transaction0.000004
starting0.000006
checking permissions0.000006
Opening tables0.000022
init0.000005
System lock0.000022
optimizing0.000005
statistics0.000011
preparing0.000011
executing0.000128
end0.000005
query end0.000004
waiting for handler commit0.000006
closing tables0.000006
freeing items0.000032
cleaning up0.000011

该结果是按照查询执行顺序排序,而不是按花费时间排序的,我们可以直接查询INFORMATION_SCHAME中的表,则可以按照需要格式化输出:

set @query_id = 1;
SELECT
	p.state,
	sum(p.duration) as Total_R,
	ROUND(100 * sum(duration)/(select sum(DURATION) from information_schema.PROFILING p2 where QUERY_ID = @query_id), 2) as Pct_R,
	count(*) as Calls
from
	information_schema.PROFILING p
where
	QUERY_ID = @query_id
group by
	state
order by
	Total_R desc;
stateTotal_RPct_RCalls
executing0.00011435.291
starting0.00004814.862
freeing items0.00003711.461
logging slow query0.0000298.981
Opening tables0.0000226.811
cleaning up0.0000113.411
statistics0.0000103.101
preparing0.0000092.791
System lock0.0000072.171
waiting for handler commit0.0000061.861
closing tables0.0000051.551
checking permissions0.0000051.551
init0.0000051.551
optimizing0.0000041.241
Executing hook on transaction0.0000041.241
end0.0000041.241
query end0.0000030.931

SHOW STATUS

MySQL的SHOW STATUS返回一些 计数器 ,既有服务器级别的全局计数器,也有某个连接的会话级别的计数器。

SHOW STATUS无法提供基于时间的统计,但是对于一些执行完查询后观察某些计数器的值还是有帮助的。通过计数器的值,我们可以猜测哪些操作代价较高或者花费时间较长。最有用的计数器包括:句柄计数器、临时文件和表计数器等。

flush status;
select * from employees;
show status where variables_name like 'handler%' or variable_name like 'Created%';

其中fulsh status是清空计数器。

Variable_nameValue
Created_tmp_disk_tables0
Created_tmp_files6
Created_tmp_tables36
Handler_commit52
Handler_delete0
Handler_discover0
Handler_external_lock728
Handler_mrr_init0
Handler_prepare0
Handler_read_first52
Handler_read_key130
Handler_read_last0
Handler_read_next221
Handler_read_prev0
Handler_read_rnd18
Handler_read_rnd_next2371
Handler_rollback0
Handler_savepoint0
Handler_savepoint_rollback0
Handler_update1
Handler_write605
MySQL之查询性能剖析:从工具到实践 大家好!一直以来,我都希望能和各位技术爱好者在学习的道路上相互陪伴、共同成长。在MySQL的使用过程中,查询性能的优化是一个绕不开的重要话题。今天,咱们就一起来深入研究MySQL查询性能剖析的相关知识,希望通过分享这些内容,能让大家在优化MySQL查询性能时更加得心应手,在技术领域不断进步。 阅读详情

相关推荐

MySQL之查询性能剖析与优化实战指南

大家好!在技术的学习道路上,我一直期望能和大家并肩前行、共同进步。MySQL作为常用的数据库管理系统,其查询性能的优化至关重要。今天,咱们就一起深入探讨MySQL查询性能剖析的相关知识,希望通过这篇文章,能帮助大家更好地掌握优化查询性能的技巧,在开发和运维工作中更加得心应手。

wj_rdk的博客 1460

mysql 查询结果怎么解读_MySQL查询优化之explain的深入解析

在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让查询优化器能够更好的工作。一、MySQL 查询优化器是如何工作的MySQL 查询优化器有几个目标,但是其中...

weixin_33721696的博客 213

MySQL之查询性能剖析:多方法解析与实践应用

大家好!一直以来,我都希望能和各位在技术学习的道路上共同探索、携手进步。在MySQL的使用场景中,查询性能直接影响着整个系统的效率。今天,咱们就深入探讨一下MySQL查询性能剖析的相关知识,帮助大家更好地掌握优化查询性能的方法,提升技术能力。

wj_rdk的博客 1374

mysql一用explain来分析并优化查询SQL

explain

weixin_70280523的博客 1537

深入骨髓的 MySQL 查询性能剖析:从系统负载到单行 DNA 级优化

MySQL查询性能优化全攻略:从系统负载分析到单行优化 本文系统介绍了MySQL性能优化的完整方法论。首先从宏观层面讲解服务器负载诊断,包括使用SHOW GLOBAL STATUS、PROCESSLIST等命令进行基础健康检查,以及慢查询日志分析和pt-query-digest工具的使用。接着深入微观层面的SQL优化技术,重点介绍了如何利用MySQL性能模式(Performance Schema)这一强大的内部观测系统进行深度诊断。文章提供了大量可直接用于生产环境的命令、脚本和分析思路,涵盖了从CPU、内存

weixin_45668002的博客 819

MySQL之查询性能优化:深入剖析慢查询与数据访问优化

大家好!在技术学习的道路上,我一直期望能和各位携手共进,一起探索MySQL数据库的优化奥秘。今天,咱们聚焦于MySQL查询性能优化中的慢查询问题,深入剖析其产生的原因,并学习如何优化数据访问来提升查询性能。希望通过这篇文章,能帮助大家更好地理解和解决MySQL查询性能相关的问题,在实际项目中打造出高效的数据库系统。

wj_rdk的博客 1084

mysql基础

3、剖析mysql查询(高性能mysql第三章) 开启慢查询的开销很低,只需要担心的是日志占用的磁盘空间,mysql还有另一种查询日志,被称为通用日志查询,在mysql5.0之后慢查询日志可以通过设置long_query_time为0来捕获所有的查询日志,并且查询的响应时间是微妙级别, 剖析单条sql语句的三种方法 具体的指标需要学习 ①可以通过此命令知道整个执行中耗时的详细情况,show profiles 详细信息可以执行show profile for query 1如果要是用shcema,可以使

m0_62674166的博客 220

深入剖析MySQL索引优化:从磁盘I/O到B+树,揭秘千万级数据查询的性能提升

磁盘I/O是数据库性能的瓶颈,减少磁盘I/O次数是提升性能的关键。B+树是MySQL索引的理想数据结构,能够有效减少磁盘I/O次数,支持高效的范围查询。索引的合理使用可以大幅提升查询性能,尤其是在数据量较大的场景下。在实际开发中,合理设计索引、利用覆盖索引、避免回表操作,是优化数据库性能的重要手段。记住,索引并非越多越好,合适的索引才是最好的索引。

阿新的博客 1011

DBeaver中连接数据库成功,但是执行SQL语句报错

Mac中试用dbeaver连接mysql无法执行sql语句

软件测试转型软件开发 2965

不修改MMDetection源码使用自定义数据和模型

以目标检测为例,用非侵入式的模型和MMDetection数据的方法进行配置。也就是不改动MMDetection的任何源码或目录的条件下,使用自定义数据训练自定义模型。

Dlite的技术笔记 1341

【PLL】分频器设计权衡:从CMOS到CML的电路实现与优化

本文深入探讨了PLL中分频器的设计权衡,比较了CMOS和CML两种电路实现的优缺点。通过实际案例分析,展示了如何在速度、功耗和噪声之间取得平衡,特别是在5G射频芯片和Wi-Fi 6E等高频应用中的优化实践。文章还提供了混合架构设计和电源噪声协同优化的实用技巧,适合电路设计工程师参考。

weixin_42521843的博客 443

【MySQL高级】——性能分析

mysql 中 profiler、explain等分析工具

qq_42000631的博客 1498

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1380

mysql单条记录的查询性能_MySQL单条查询性能剖析

剖析单条查询1.使用show profiles 和 show profile for query n;在会话中先设置set profiling = 1,查询完毕再使用show profiles显示查询历史,如下mysql> show profiles;+----------+------------+----------------------------------------------...

weixin_35070925的博客 201

基于PWM的汽车仪表步进电机微步驱动优化实践

本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。

weixin_29169505的博客 512

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

第3章服务器性能剖析- 3.3剖析MYSQL查询

学习笔记

zhonghanliangsmile的博客 713

【FPGA】Robei EDA的使用(10)————如何更新EDA的使用license

#海卑而下,能聚众水;学问笃实,以生光辉。 有的时候,有些问题自己通过查找资料解决,宁愿磨难一下,走点弯路,但收获更深刻的认知;不过,有些问题,问一下别人,可能会避免自己耗费过多时间做无用工,这些问题问会的人是极好的。但是怎样把握这个问题的类型,大约只能靠经验了~ (问我为何出此感言,谁叫我纠结了两天的问题,被人家一句话解决,我这个恨啊) ————————————————————正文开始的分割线———————————————— Robei EDA在使用上会有一个注册码,这个license在获取之后,每一次的

Ninquelote的博客 1004

剖析Mysql查询性能和诊断间歇性问题

剖析Mysql查询性能 说明 本章主要通过,如何确认服务器是否达到了性能最佳的状态,找出某条语句为什么执行不够快,以及诊断被用户描述成“停顿”、“堆积”、或者“卡死”的某些间歇性疑难故障。这三个问题做出解答。我们这里将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语句,所以它关注的任务是查询或者语句,如S...

shareing 812

计算机视觉 | 面试题:01、过拟合和欠拟合的表现与解决方法

问题 过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见,在做酷狗音乐的笔试题时还懵逼了一会,居然还真的有这样的说法。 这应该是基础中的基础了,笔试题都做烂了。那就当做今天周末,继续放个假吧…… 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集、验证集以及新数据上的表现很差,损失曲线呈现一种高方差状态。(高方差指的是训练集误差较低,而测试集误差比训练集大较多) 过拟合的原因 从两个角度去分析

Mrrunsen的博客 869

【STK】手把手教你利用STK进行光电红外仿真04-STK/EOIR模块的实战操作1航天器星载相机对LEO卫星成像

今天引入一个实际的场景,帮助大家完成对于这个模块的理解与运用。

weixin_44184852的博客 2417

高性能mysql sakila_Mysql剖析单条查询(高性能mySql学习笔记)

Mysql剖析单条查询的方法:(以mysql官网提供的sakila数据库演示)方式1.通过show profile工具(showprofile是Mysql5.1版本之后引入的功能)工作原理:show profile是一个工具,当一条查询提交给服务器时,该工具会将记录剖析信息到一张临时表,并且给查询赋予一个从1开始的整数标志符.使用举例:Mysql> SET profiling=1;(默认是禁...

weixin_36051064的博客 286

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

《高性能MySQL》笔记----剖析MySQL查询

MySQL优化第一步:找到最差的语句; 慢查询日志:https://www.cnblogs.com/luyucheng/p/6265594.html MySQL慢查询日志是一种轻量而且功能全面的性能剖析工具、CPU开销小; 分析慢查询日志并生成剖析报告的工具:pt-query-digest; 参考:https://www.36nu.com/post/228.html; * 定位报告中的M...

探索未知 216

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mysql单条查询性能剖析 show profile

有时候我们在mysql的slowlog中发现一条慢查询,分析这条sql,除了使用explain查看执行计划外,想查询这条sql语句的每个步骤及其花费时间,可以使用show profile工具。 profiling 是由会话变量 profling 控制的默认情况下是关闭的[off],设置profiling变量为1或者on打开查询剖析记录mysql> SET profiling = 1;show pr

Chappi 1216

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MySQL单条查询性能剖析

3.3.2剖析单条查询1.使用show profiles 和 show profile for query n;在会话中先设置set profiling = 1,查询完毕再使用show profiles显示查询历史,如下mysql> show profiles; +----------+------------+--------------------------------------------

CoderGo的专栏 671

MySQL性能优化——剖析单条查询

MySQL性能优化——剖析单条查询 EXPLAIN 的使用 EXPLAIN的使用非常简单,就在你要进行的查询语句前跟上 EXPLAIN 即可。 例如: mysql&gt; EXPLAIN SELECT * FROM house limit 5\G; *************************** 1. row *************************** id: 1 ...

伈伈点灯的博客 269
上一篇: Spring Cloud Config 的简单使用
下一篇: MySQL怎样创建高性能的索引
风萧水丶寒
博客等级 码龄11年 6粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值