Query Trace Profile
本文介绍如何获取和分析 Query Trace Profile。Query Trace Profile 记录了指定查询语句的 Debug 信息,包括耗时、变量值以及日志。Query Trace Profile 中的信息分为多个模块,您可以从不同的模块角度调试并识别查询性能瓶颈。该功能自 v3.2.0 起支持。
语法
您可以使用以下语法获取指定查询的 Query Trace Profile:
TRACE { TIMES | VALUES | LOGS | ALL } [ <module> ] <query_statement>
-
TIMES
:跟踪指定查询的每个阶段事件的时间成本。 -
VALUES
:跟踪指定查询的变量及其值。 -
LOGS
:跟踪指定查询的日志记录。 -
ALL
:按时间顺序列出所有的TIMES
、VALUES
和LOGS
信息。 -
<module>
:要查看信息的模块。有效值:BASE
:基础模块。MV
:物化视图模块。OPTIMIZER
:优化器模块。SCHEDULE
:调度模块。EXTERNAL
:外表相关模块。
如果未指定模块,默认使用
BASE
。 -
<query_statement>
: 要获取 Query Trace Profile 的查询语句。
使用场景
查看查询的耗时
以下示例查看指定查询的优化器模块耗时:
MySQL > TRACE TIMES OPTIMIZER SELECT * FROM t1 JOIN t2 ON t1.v1 = t2.v1;
+---------------------------------------------------------------------+
| Explain String |
+---------------------------------------------------------------------+
| 2ms|-- Total[1] 15ms |
| 2ms| -- Analyzer[1] 1ms |
| 4ms| -- Transformer[1] 1ms |
| 6ms| -- Optimizer[1] 11ms |
| 6ms| -- preprocessMvs[1] 0 |
| 6ms| -- RuleBaseOptimize[1] 3ms |
| 6ms| -- RewriteTreeTask[41] 2ms |
| 7ms| -- PushDownJoinOnClauseRule[1] 0 |
| 7ms| -- PushDownPredicateProjectRule[2] 0 |
| 7ms| -- PushDownPredicateScanRule[2] 0 |
| 8ms| -- MergeTwoProjectRule[3] 0 |
| 8ms| -- PushDownJoinOnExpressionToChildProject[1] 0 |
| 8ms| -- PruneProjectColumnsRule[6] 0 |
| 8ms| -- PruneJoinColumnsRule[2] 0 |
| 8ms| -- PruneScanColumnRule[4] 0 |
| 9ms| -- PruneSubfieldRule[2] 0 |
| 9ms| -- PruneProjectRule[6] 0 |
| 9ms| -- PartitionPruneRule[2] 0 |
| 9ms| -- DistributionPruneRule[2] 0 |
| 9ms| -- MergeProjectWithChildRule[3] 0 |
| 10ms| -- CostBaseOptimize[1] 6ms |
| 10ms| -- OptimizeGroupTask[6] 0 |
| 10ms| -- OptimizeExpressionTask[9] 0 |
| 10ms| -- ExploreGroupTask[4] 0 |
| 10ms| -- DeriveStatsTask[9] 3ms |
| 13ms| -- ApplyRuleTask[16] 0 |
| 13ms| -- OnlyScanRule[2] 0 |
| 14ms| -- HashJoinImplementationRule[2] 0 |
| 14ms| -- EnforceAndCostTask[12] 1ms |
| 14ms| -- OlapScanImplementationRule[2] 0 |
| 15ms| -- OnlyJoinRule[2] 0 |
| 15ms| -- JoinCommutativityRule[1] 0 |
| 16ms| -- PhysicalRewrite[1] 0 |
| 17ms| -- PlanValidate[1] 0 |
| 17ms| -- InputDependenciesChecker[1] 0 |
| 17ms| -- TypeChecker[1] 0 |
| 17ms| -- CTEUniqueChecker[1] 0 |
| 17ms| -- ExecPlanBuild[1] 0 |
| Tracer Cost: 273us |
+---------------------------------------------------------------------+
39 rows in set (0.029 sec)
在 TRACE TIMES 语句返回的 Explain String 中,每行(除最后一行外)都对应指定查询模块中的一个事件。最后一行的 Tracer Cost
记录的是 Trace 过程的耗时。
以 | 4ms| -- Transformer[1] 1ms
为例:
- 左边列中记录的是事件首次执行在查询生命周期中的时间点。
- 在右边列中,连续的破折号后是事件的名称,即
Transformer
。