MySql 使用SHOW PROFILE 进行SQL 分析
2017-11-24 22:02
316 查看
什么是SHOW PROFILE:
SHOW PROFILE 是MySql 提供可以用来分析当前会话语句执行的资源消耗情况,可以用于SQL 的调优测评依据。在默认的情况下,参数处于关闭状态,并保存着最近15 次的运行结果。我们可以通过 SHOW VARIABLES LIKE ‘PROFILING’; 命令查看参数的开关情况;通过 SET PROFILING = ON; 命令设置开启状态。
我们看看当我们执行SHOW PROFIES; 会查询到些什么?
Query_ID表示从连接上数据库到现在执行的SQL 语句序号,Duration 表示执行该SQL 所耗费的时间(S),Query 表示执行的操作。如果我们想要具体的知道执行SQL 时CPU 与 I/O 的消耗,可以使用 SHOW PROFILE CPU ,BLOCK IO FOR QUERY Query_ID; 命令。通过下图我们可以通过Status 属性清楚的知道MySql 在执行SQL 语句时每个阶段所消耗的时间,CPU 内存 与 I/O 资源。
但是如果在Status 属性中我们看到了如下表中的一些值,就说明我们的SQL 在执行会消耗大量的时间,需要优化。由于我本地的数据库中只有很少的数据信息,并没有出现下面的情况。
SHOW PROFILE 是MySql 提供可以用来分析当前会话语句执行的资源消耗情况,可以用于SQL 的调优测评依据。在默认的情况下,参数处于关闭状态,并保存着最近15 次的运行结果。我们可以通过 SHOW VARIABLES LIKE ‘PROFILING’; 命令查看参数的开关情况;通过 SET PROFILING = ON; 命令设置开启状态。
我们看看当我们执行SHOW PROFIES; 会查询到些什么?
Query_ID Duration Query 152 0.0012655 SHOW STATUS 153 0.00120325 SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID 154 0.0002665 SELECT STATE AS `状态`, ROUND(SUM(DURATION),7) AS `期间`, CONCAT(ROUND(SUM(DURATION)/0.001724*100,3), '%') AS `百分比` FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=151 GROUP BY STATE ORDER BY SEQ 155 0.000189 SET PROFILING=1 156 0.00206525 SHOW STATUS 157 0.001668 SHOW STATUS 158 0.00054625 SELECT * FROM t_emp WHERE dept_id in (SELECT dept_id FROM t_dept) LIMIT 5 159 0.001448 SHOW STATUS 160 0.00115475 SELECT QUERY_ID, SUM(DURATION) AS SUM_DURATION FROM INFORMATION_SCHEMA.PROFILING GROUP BY QUERY_ID 161 0.00026725 SELECT STATE AS `状态`, ROUND(SUM(DURATION),7) AS `期间`, CONCAT(ROUND(SUM(DURATION)/0.000550*100,3), '%') AS `百分比` FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=158 GROUP BY STATE ORDER BY SEQ 162 0.00019575 SELECT * FROM `ssm_crud`.`t_emp` LIMIT 0 163 0.0007275 SHOW COLUMNS FROM `ssm_crud`.`t_emp` 164 0.0001305 SET PROFILING=1 165 0.00131475 SHOW STATUS 166 0.0011755 SHOW STATUS
Query_ID表示从连接上数据库到现在执行的SQL 语句序号,Duration 表示执行该SQL 所耗费的时间(S),Query 表示执行的操作。如果我们想要具体的知道执行SQL 时CPU 与 I/O 的消耗,可以使用 SHOW PROFILE CPU ,BLOCK IO FOR QUERY Query_ID; 命令。通过下图我们可以通过Status 属性清楚的知道MySql 在执行SQL 语句时每个阶段所消耗的时间,CPU 内存 与 I/O 资源。
但是如果在Status 属性中我们看到了如下表中的一些值,就说明我们的SQL 在执行会消耗大量的时间,需要优化。由于我本地的数据库中只有很少的数据信息,并没有出现下面的情况。
Status | 介绍 |
---|---|
converting HEAP to MyISAM | 查询结果集太大,内存不够借用磁盘空间 |
Creating tmp table | 拷贝数据到临时表(先创建,然后拷贝数据,用完后会自动删除),很消耗资源 |
Coping to tmp table on disk | 把内存中的临时表复制到磁盘,很危险 |
locked | 加锁 |
相关文章推荐
- MySql 使用SHOW PROFILE 进行SQL 分析
- 在文件地理数据库中使用 SQL 进行报告和分析 (转)
- [MySQL 工具] pt-index-usage使用 --> 对查询中的索引进行分析
- 使用Apache Hadoop、Impala和MySQL进行数据分析
- 【SQL】MySQL之使用mysqlbinlog进行增量备份及恢复详解
- windows下使用MYSQL的mysqldumpslow进行慢日志分析
- mysql show profiles 使用分析sql 性能
- 分析mysql的QueryCache在相同语义SQL是否可以使用查询缓存
- mysql show profiles 使用分析sql 性能
- 在文件地理数据库中使用 SQL 进行报告和分析
- 【MySql性能优化二】利用explain进行查询和分析sql语句
- MySQL中使用SQL语句对字段进行重命名
- 使用Jmeter对Mysql进行压力测试无法执行多条sql语句问题
- Tpcc-MySQL对mysql数据库进行性能测试报告、分析及使用gnuplot生成图表展示
- Mysql使用profiling分析慢sql语句的原因
- [MySQL优化] -- 如何使用SQL Profiler 性能分析器
- 【SQL】MySQL之使用mysqlbinlog进行增量备份及恢复详解
- 在文件地理数据库中使用 SQL 进行报告和分析
- MySQL中使用SHOW PROFILE命令分析性能的用法整理
- windows下使用MYSQL的mysqldumpslow进行慢日志分析