Mysql Show Profile


Posted in MySQL onApril 05, 2021

简介

mysql提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优的测量。

官网:https://dev.mysql.com/doc/refman/8.0/en/show-profile.html

默认情况下,参数处于关闭状态,并保存最近15次的运行结果。

分析步骤

  1. 是否支持,看看当前的mysql版本是否支持
mysql> Show  variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | OFF   |
+---------------+-------+
1 row in set (0.04 sec)
# 默认是关闭,使用前需要开启
  1. 开启功能,默认是关闭,使用前需要开启
mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

mysql> Show  variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling     | ON    |
+---------------+-------+
1 row in set (0.05 sec)
  1. 运行SQL
mysql> select * from emp group by id%20  order by 2;
+----+-------+--------+----------+-----+------------+---------+--------+--------+
| id | empno | ename  | job      | mgr | hiredate   | sal     | comm   | deptno |
+----+-------+--------+----------+-----+------------+---------+--------+--------+
|  1 |  1002 | Oobqzz | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    100 |
|  2 |  1003 | ESDoGs | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
|  3 |  1004 | qZXPfi | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    104 |
|  4 |  1005 | ZxrpzB | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    101 |
|  5 |  1006 | tpqNQQ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    106 |
|  6 |  1007 | JCHGkg | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    100 |
|  7 |  1008 | QVjinQ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    102 |
|  8 |  1009 | cqwnXX | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    109 |
|  9 |  1010 | YVLQWn | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    104 |
| 10 |  1011 | uKopHs | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
| 11 |  1012 | mEknMS | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    101 |
| 12 |  1013 | XyzdPR | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    107 |
| 13 |  1014 | kRBijz | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
| 14 |  1015 | RGFiZA | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    105 |
| 15 |  1016 | bEVOht | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    104 |
| 16 |  1017 | qdwVnE | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    101 |
| 17 |  1018 | YvhAdQ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
| 18 |  1019 | asPVhZ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    105 |
| 19 |  1020 | KTpTzR | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    106 |
| 20 |  1021 | SnOcYH | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    103 |
+----+-------+--------+----------+-----+------------+---------+--------+--------+
20 rows in set (2.12 sec)

mysql> select * from emp group by id%10 limit 150000;
+----+-------+--------+----------+-----+------------+---------+--------+--------+
| id | empno | ename  | job      | mgr | hiredate   | sal     | comm   | deptno |
+----+-------+--------+----------+-----+------------+---------+--------+--------+
| 10 |  1011 | uKopHs | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
|  1 |  1002 | Oobqzz | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    100 |
|  2 |  1003 | ESDoGs | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    108 |
|  3 |  1004 | qZXPfi | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    104 |
|  4 |  1005 | ZxrpzB | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    101 |
|  5 |  1006 | tpqNQQ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    106 |
|  6 |  1007 | JCHGkg | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    100 |
|  7 |  1008 | QVjinQ | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    102 |
|  8 |  1009 | cqwnXX | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    109 |
|  9 |  1010 | YVLQWn | salesman |   1 | 2021-04-04 | 2000.00 | 400.00 |    104 |
+----+-------+--------+----------+-----+------------+---------+--------+--------+
10 rows in set (1.91 sec)
  1. 查看结果
mysql> show profiles;
+----------+------------+-----------------------------------------------+
| Query_ID | Duration   | Query                                         |
+----------+------------+-----------------------------------------------+
|        1 | 0.00059150 | Show  variables like 'profiling'              |
|        2 | 1.82311475 | select * from emp group by id%10 limit 150000 |
|        3 | 1.92254050 | select * from emp group by id%20  order by 5  |
|        4 | 1.91409800 | select * from emp group by id%20  order by 2  |
|        5 | 1.81238075 | select * from emp group by id%10 limit 150000 |
+----------+------------+-----------------------------------------------+
5 rows in set (0.14 sec)
  1. 诊断SQL
    show profile cpu,block io for query n (n为上一步前面的问题SQL数字号码);
mysql> show profile cpu,block io for query 4;
+----------------------+----------+----------+------------+--------------+---------------+
| Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting             | 0.000037 | 0.000000 | 0.000000   | NULL         | NULL          |
| checking permissions | 0.000005 | 0.000000 | 0.000000   | NULL         | NULL          |
| Opening tables       | 0.000016 | 0.000000 | 0.000000   | NULL         | NULL          |
| System lock          | 0.000008 | 0.000000 | 0.000000   | NULL         | NULL          |
| init                 | 0.000018 | 0.000000 | 0.000000   | NULL         | NULL          |
| optimizing           | 0.000003 | 0.000000 | 0.000000   | NULL         | NULL          |
| statistics           | 0.000017 | 0.000000 | 0.000000   | NULL         | NULL          |
| preparing            | 0.000006 | 0.000000 | 0.000000   | NULL         | NULL          |
| Creating tmp table   | 0.000308 | 0.000000 | 0.000000   | NULL         | NULL          |
| executing            | 0.000003 | 0.000000 | 0.000000   | NULL         | NULL          |
| Copying to tmp table | 1.913459 | 1.921875 | 0.000000   | NULL         | NULL          |
| Sorting result       | 0.000025 | 0.000000 | 0.000000   | NULL         | NULL          |
| Sending data         | 0.000044 | 0.000000 | 0.000000   | NULL         | NULL          |
| end                  | 0.000004 | 0.000000 | 0.000000   | NULL         | NULL          |
| removing tmp table   | 0.000007 | 0.000000 | 0.000000   | NULL         | NULL          |
| end                  | 0.000002 | 0.000000 | 0.000000   | NULL         | NULL          |
| query end            | 0.000003 | 0.000000 | 0.000000   | NULL         | NULL          |
| closing tables       | 0.000010 | 0.000000 | 0.000000   | NULL         | NULL          |
| freeing items        | 0.000124 | 0.000000 | 0.000000   | NULL         | NULL          |
| logging slow query   | 0.000002 | 0.000000 | 0.000000   | NULL         | NULL          |
| cleaning up          | 0.000001 | 0.000000 | 0.000000   | NULL         | NULL          |
+----------------------+----------+----------+------------+--------------+---------------+
21 rows in set (0.19 sec)

参数:

类型 含义
ALL 显示所有的开销信息
BLOCK IO 显示块IO相关开销
CONTEXT SWITCHES 上下文切换相关开销
CPU 显示CPU相关开销信息
IPC 显示发送和接收相关开销信息
MEMORY 显示内存相关开销信息
PAGE FAULTS 显示页面错误相关开销信息
SOURCE 显示和Source_function,Source_file,Source_line相关的开销信息
SWAPS 显示交换次数相关开销的信息

展示个最全的:

mysql> show profile all for query 4;
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------+---------------+-------------+
| Status               | Duration | CPU_user | CPU_system | Context_voluntary | Context_involuntary | Block_ops_in | Block_ops_out | Messages_sent | Messages_received | Page_faults_major | Page_faults_minor | Swaps | Source_function | Source_file   | Source_line |
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------+---------------+-------------+
| starting             | 0.000037 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | NULL            | NULL          | NULL        |
| checking permissions | 0.000005 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        4833 |
| Opening tables       | 0.000016 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_base.cc   |        4888 |
| System lock          | 0.000008 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | lock.cc       |         299 |
| init                 | 0.000018 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        2594 |
| optimizing           | 0.000003 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |         865 |
| statistics           | 0.000017 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        1071 |
| preparing            | 0.000006 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        1093 |
| Creating tmp table   | 0.000308 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        1616 |
| executing            | 0.000003 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        1851 |
| Copying to tmp table | 1.913459 | 1.921875 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        1998 |
| Sorting result       | 0.000025 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        2282 |
| Sending data         | 0.000044 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        2395 |
| end                  | 0.000004 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |        2630 |
| removing tmp table   | 0.000007 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |       11304 |
| end                  | 0.000002 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_select.cc |       11329 |
| query end            | 0.000003 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        4512 |
| closing tables       | 0.000010 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        4564 |
| freeing items        | 0.000124 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        5840 |
| logging slow query   | 0.000002 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        1512 |
| cleaning up          | 0.000001 | 0.000000 | 0.000000   | NULL              | NULL                | NULL         | NULL          | NULL          | NULL              | NULL              | NULL              | NULL  | <unknown>       | sql_parse.cc  |        1468 |
+----------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+-----------------+---------------+-------------+
21 rows in set (0.23 sec)
  1. 特别需要注意的结论
  • converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。
  • Creating tmp table 创建临时表,拷贝数据到临时表,用完再删除。
  • Copying to tmp table on disk 把内存中临时表复制到磁盘,很危险!
  • locked 锁了都
MySQL 相关文章推荐
MySQL之DML语言
Apr 05 MySQL
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL开启事务的方式
Jun 26 MySQL
sql注入教程之类型以及提交注入
Aug 02 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
mysql自增长id用完了该怎么办
Feb 12 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
Mysql - 常用函数 每天积极向上
Apr 05 #MySQL
mysql多表查询-笔记七
Apr 05 #MySQL
mysql部分操作
Apr 05 #MySQL
left join、inner join、right join的区别
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
mysql字符串截取函数小结
MySQL索引篇之千万级数据实战测试
You might like
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
javascript 学习之旅 (3)
2009/02/05 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript控制台详解
2015/06/25 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python导出hive数据表的schema实例代码
2018/01/22 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
审计主管岗位职责
2014/01/31 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
高中军训感言600字
2014/03/11 职场文书
产品质量承诺范本
2014/03/31 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
应届生求职信范文
2014/06/30 职场文书
自动化专业大学生职业生涯规划范文:爱拚才会赢
2014/09/12 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
结婚司仪主持词
2015/06/29 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技