问题描述
有人可以帮我解决这个问题吗?
当我执行命令SHOW PROFILES时,我得到的持续时间与命令SHOW PROFILES(不带“ S”)不同,在这种情况下,我必须考虑哪个?
例如: 对于显示配置文件
query | DURATION
53 0.08104775
关于INFORMATION_SCHEMA.PROFILING(显示配置文件)
SET @query_id := 53;
SELECT SUM(Total_R) FROM (
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.PROFILING
WHERE QUERY_ID = @query_id
GROUP BY STATE
ORDER BY Total_R DESC ) AS X ;
query | TOTAL DURATION
53 0.000430
我对于哪个时间是正确的时间感到困惑。
解决方法
一个简单的 SUM(...) 查询似乎提供与 SHOW PROFILES“duration”列几乎相同的值:
mysql> SET profiling = 1;
mysql> SELECT SQRT(100);
+-----------+
| SQRT(100) |
+-----------+
| 10 |
+-----------+
1 row in set (0.02 sec)
mysql> SHOW PROFILES;
+----------+------------+------------------+
| Query_ID | Duration | Query |
+----------+------------+------------------+
| 1 | 0.00010700 | SELECT SQRT(100) |
+----------+------------+------------------+
1 row in set,1 warning (0.01 sec)
mysql> SELECT SUM(DURATION) FROM information_schema.PROFILING WHERE QUERY_ID = 1;
+---------------+
| SUM(DURATION) |
+---------------+
| 0.000108 |
+---------------+
(在 MySQL 5.1 和 Percona 8.0 上测试)
我还不明白分析持续时间值(0.000107 和 0.000108)与查询结果正下方报告的时间(“集合中的 1 行(0.02 秒)”)之间的区别。