您的位置:首页 > 数据库 > MySQL

MySql 使用SHOW PROFILE 进行SQL 分析

2017-11-25 17:02 836 查看
什么是SHOW PROFILE:

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加锁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  profiling mysql