Mysql单条查询性能剖析 show profile
来源:互联网 发布:java中的tag 编辑:程序博客网 时间:2024/06/08 21:40
有时候我们在mysql的slowlog中发现一条慢查询,分析这条sql,除了使用explain查看执行计划外,想查询这条sql语句的每个步骤及其花费时间,可以使用show profile工具。
profiling 是由会话变量 profling 控制的,默认情况下是关闭的[off],设置profiling变量为1或者on打开查询剖析记录。
mysql> SET profiling = 1;
show profiles 展示了当前会话最近的查询记录列表,列表的数量是由会话变量 profiling_history_size 控制的,默认为15条,最大可以设置为100条,如果会话查询数量超过这个变量设置后,新查询会顶替老查询。
mysql> SET profiling_history_size = 20;
除了 SHOW PROFILE 和 SHOW PROFILES外的所有查询语句都会被记录,即使是语法错误的语句。当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表。并给与每个查询一个从1开始的自增id。使用show profile指定id 查询相应的执行步骤及时间消耗。
mysql> SHOW PROFILE for query_id = id;
如果SHOW PROFILE没有指定id,默认显示最近查询的一条的执行详情。
show profile默认展示的是执行步骤和花费的时间,同时通过指定type参数,提供了cpu,内存,io消耗以及更多的信息。
mysql> SHOW PROFILE [all|cpu|memory|block io]for query_id = id;
show profile输出是按照执行步骤顺序排序,而不是按照时间花费排序,因此我们很难看出具体是哪几部的消耗最大。但是show profile输出又不能使用类似order by的排序。幸运的是mysql同时把剖析记录写入INFORMATION_SCHEMA.PROFILING这张临时表中。所以我们可以按需格式话输出
mysql> SET @query_id = id;mysql> SELECT state, sum(duration) AS total_r, round( 100 * sum(duration) / ( SELECT sum(duration) FROM information_schema.profiling WHERE query_id = @query_id ), 2 ) AS pct_r, count(*) AS calls, sum(duration) / count(*) AS "r/call"FROM information_schema.profilingWHERE query_id = @query_idGROUP BY stateORDER BY total_r DESC;
上面的sql 会统计计算查询每一部的次数,消耗时间,占查询的时间比,以及每一步的平均消耗时间,并且按照时间逆序,这样我们就能很方便的知道sql的开销在哪里。
查考
mysql手册
高性能MySQL
- Mysql单条查询性能剖析 show profile
- 单条剖析查询 SHOW PROFILE
- MySQL单条查询性能剖析
- 使用show profile分析单条查询
- mysql查询性能分析(show status,show profile,explain)
- MySQL SQL Tuning:Profile定位单条QUERY性能瓶颈
- mysql性能分析工具--show profile
- show profile使用方法查看mysql性能
- MySQL性能分析语句 show profile/show profiles
- 使用mysql profiling功能剖析单条查询
- 使用mysql profiling功能剖析单条查询
- show profile 分析性能
- mysql性能分析工具show profile(翻译)
- mysql -> show profile ;
- mysql的show profile
- mysql show profile
- mysql show profile
- Mysql show profile 详解
- UI布局笔记
- Android主流HOOK框架介绍与应用--游戏破解游戏外挂的必杀技
- vs2013和IIS同步调试设定
- LeetCode-541. Reverse String II (Java)
- Setting up Vim for React.js
- Mysql单条查询性能剖析 show profile
- Jquery利用is(“:checked”)判断多选框是不是被选中
- 海纳百川、有容乃大
- LintCode-k数和
- Python笔记
- CentOS下安装JDK
- Hbase集群搭建
- SplitContainer 控件扩展之收缩面板
- php设计模式(迭代器模式)