【问题标题】:Mysql total time SHOW PROFILE is diiferent from SHOW PROFILESMysql 总时间 SHOW PROFILE 与 SHOW PROFILES 不同
【发布时间】:2020-09-10 07:04:18
【问题描述】:

有人可以帮我解决这个问题吗?

当我执行命令 SHOW PROFILES 时,我得到的持续时间与命令 SHOW PROFILE(不带“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

我不知道哪个时间是正确的。

【问题讨论】:

    标签: mysql sql-tuning database-tuning


    【解决方案1】:

    一个简单的 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 秒)”)之间的区别。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 2018-03-06
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多