获取Mysql语句执行时的详细信息
1. 通过SHOW STATUS获取更多信息
在调试mysql语句时,如果执行计划不能提供足够的信息支持判断,可以通过在语句执行前执行FLUSH STATUS,执行完语句后执行SHOW STATUS LIKE 获取更多信息,例如:
SHOW STATUS WHERE Variable_name LIKE 'Handler%' OR variable_name LIKE 'Created%';其执行部分结果解释如下:
属性 |
释义 |
Created_tmp_disk_tables |
语句执行时,Mysql创建的磁盘临时表个数;越少越好 |
Created_tmp_files |
语句执行时,Mysql创建的临时文件个数; |
Created_tmp_tables |
语句执行时,Mysql创建的临时表总个数;越少越好 |
Handler_read_first |
读取第一条索引的次数; 此值越高,表明Mysql进行了多次的全索引扫描(full index scan);而当数据在磁盘不在内存中时,全索引扫描通常会导致许多随机读(random read),这通常比全表扫描(full table scan)采用的顺序扫描性能更差; |
Handler_read_key |
通过索引读取数据的次数; 此值越高表示查询正确地走了索引; |
Handler_read_next |
通过索引顺序读取下一行的次数;当出现索引覆盖扫描或者通过在索引列限制了范围时,该次数会增加; |
Handler_read_prev |
通过索引顺序读取前一行的次数;这种读取方式主要用于对ORDER BY … DESC 语句的优化中 |
Handler_read_rnd |
通过固定的位置读取一行数据的次数;越低越好; 通常在需要对结果排序时,此值会比较高; 表明可能存在全表扫描或者不恰当的join |
Handler_read_rnd_next |
通过直接读取数据文件获取下一行数据的次数;越低越好; 通常在进行数据扫描时,此值会比较高;// TODO 通常表明索引设置不当或者查询未有效利用索引; |
Handler_write |
向表中插入数据的次数; 在生成临时表的查询中,此值表示临时表的数据量大小; |
2. 通过查看PROFILE获取更多信息
Mysql 的profile保存了当前会话若干语句在执行时所使用资源的情况,通过会话级的参数profiling控制是否保存profile信息,可以通过以下语句打开(下述的方法将在将来的版本中不再支持,官方建议通过Performanc Schema进行替代):
set profiling=1;
打开会话profile后执行语句,mysql会保留该信息,可以通过show profiles查看目前记录了profile信息的查询,以query_id标识顺序。然后可以通过如下语句获取某条语句的profile信息:
show profile (cpu) for query query_id;
示例的结果如下,duration列出各阶段耗时,CPU_user及CPU_system分别列出用户态和系统态的CPU耗时。
Status |
Duration |
CPU_user |
CPU_system |
starting |
0.000044 |
0 |
0 |
checking permissions |
0.000005 |
0 |
0 |
Opening tables |
0.000019 |
0 |
0 |
init |
0.000009 |
0 |
0 |
System lock |
0.000054 |
0 |
0 |
optimizing |
0.000035 |
0 |
0 |
statistics |
0.000012 |
0 |
0 |
preparing |
0.000009 |
0 |
0 |
executing |
0.000002 |
0 |
0 |
Sending data |
0.014502 |
0.024 |
0 |
end |
0.000012 |
0 |
0 |
query end |
0.000005 |
0 |
0 |
closing tables |
0.000009 |
0 |
0 |
freeing items |
0.000155 |
0 |
0 |
cleaning up |
0.000014 |
0 |
0 |
转载于:https://www.cnblogs.com/luojiahu/p/10889957.html
获取Mysql语句执行时的详细信息相关推荐
- MySQL 查看SQL语句执行阶段和进度信息
MySQL 查看SQL语句执行阶段和进度信息 测试MySQL版本:5.7.31 根据<MySQL性能优化金字塔法则>做的实验,好书推荐! 我们在创建索引时,经常需要等待执行的SQL一段时间 ...
- 100% 展示 MySQL 语句执行的神器-Optimizer Trace
在上一篇文章<用Explain 命令分析 MySQL 的 SQL 执行>中,我们讲解了 Explain 命令的详细使用.但是它只能展示 SQL 语句的执行计划,无法展示为什么一些其他的执行 ...
- mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace
在上一篇文章<用Explain 命令分析 MySQL 的 SQL 执行>中,我们讲解了 Explain 命令的详细使用.但是它只能展示 SQL 语句的执行计划,无法展示为什么一些其他的执行 ...
- oracle的sql执行计划语句,最权威Oracle获取SQL语句执行计划大全
该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...
- MySQL语句执行过程
目录 前言 MySQL语句执行过程 一.连接器 二.查询缓存 三.分析器 四.优化器 1.逻辑查询优化 1.1 逻辑查询优化思路. 2.2 查询重写规则 2.3 启发式规则再逻辑优化阶段的应用 2.3 ...
- sql语句分析是否走索引_mysql sql语句执行时是否使用索引检查方法
在日常开发中,使用到的数据表经常都会有索引,这些索引可能是开发人员/DBA建表时创建的,也可能是在使用过程中新增的.合理的使用索引,可以加快数据库查询速度.然而,在实际开发工作中,会出现有些sql语句 ...
- EXPLAIN PLAN获取SQL语句执行计划
一.获取SQL语句执行计划的方式 1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 2. 启用执行计划跟踪功能,即autotrace功能 3 ...
- hive 把mysql语句执行_Hive SQL 语句的执行顺序
提示 Hive SQL 教程 编写中,使用过程中有任何建议,提供意见.建议.纠错.催更加微信 sinbam. 当我们写了一个 sql,但是执行起来很慢,这时如果我们知道这个sql的底层执行流程是怎样的 ...
- mysql一条语句是如何被执行的——带你了解mysql语句执行内部顺序
文章目录 写在前面 MySQL基本架构 超详细架构图 连接器 查询缓存 解析器 MySQL 8.0对Parser所做的改进 优化器 执行器 存储引擎 SQL语句执行时间分析 参考资料 写在前面 sel ...
最新文章
- RandomAecessFile open failed: EISDIR (Is a directory)
- Ubuntu自带pdf查看器不能显示中文解决问题
- SPOJ3931(N个点形成三角形的最大面积)
- php引用下级目录文件夹,使用PHP遍历文件夹与子目录的函数代码
- 《软件项目管理(第二版)》第 6 章——项目质量管理 重点部分总结
- android动画能超过父容器吗,Android中你不得不知道的动画知识 (一)
- Spring bean注入方式
- 修改model,映射到表中
- apiDoc之api接口文档生成
- MAC安装maven步骤
- 多媒体计算机特性,多媒体计算机的基本特性
- 企业服务的定义、分类与特点
- 抖音api开放平台对接_抖音开放一键发布功能 第三方内容可分享至抖音
- Windows10息屏快的问题解决办法(在更改屏幕和睡眠时间无效的情况下)
- nRF52832 BLE UART
- Android studio实现番茄钟
- 给出一个正整数,求出它是几位数,逆序输出各位数字,顺序输出各位数字。
- 数字存储示波器基本工作原理与使用方法
- urlrewrite使用介绍
- 25款很好看的液晶数字字体下载