跳到主要内容
版本:Nightly

EXPLAIN

EXPLAIN 用于提供语句的执行计划。

Syntax

EXPLAIN [ANALYZE] [VERBOSE] SELECT ...

ANALYZE 子句将执行语句并测量每个计划节点花费的时间以及输出的总行数等。

VERBOSE 子句可以进一步提供执行计划时详细的信息。

示例

Explain 以下的查询:

EXPLAIN SELECT * FROM monitor where host='host1'\G

样例输出:

*************************** 1. row ***************************
plan_type: logical_plan
plan: MergeScan [is_placeholder=false]
*************************** 2. row ***************************
plan_type: physical_plan
plan: MergeScanExec: peers=[4612794875904(1074, 0), ]

plan_type 列指示了是 logical_plan 还是 physical_planplan 列详细说明了执行计划。

MergeScan 计划负责合并多个 region 的查询结果。物理计划 MergeScanExec 中的 peers 数组包含了将要扫描的 region 的 ID。

使用 ANALYZE 解释执行计划:

EXPLAIN ANALYZE SELECT * FROM monitor where host='host1'\G

样例输出:

*************************** 1. row ***************************
stage: 0
node: 0
plan: MergeScanExec: peers=[4612794875904(1074, 0), ] metrics=[output_rows: 0, greptime_exec_read_cost: 0, finish_time: 3301415, first_consume_time: 3299166, ready_time: 3104209, ]

*************************** 2. row ***************************
stage: 1
node: 0
plan: SeqScan: region=4612794875904(1074, 0), partition_count=0 (0 memtable ranges, 0 file 0 ranges) metrics=[output_rows: 0, mem_used: 0, build_parts_cost: 1, build_reader_cost: 1, elapsed_await: 1, elapsed_poll: 21250, scan_cost: 1, yield_cost: 1, ]

*************************** 3. row ***************************
stage: NULL
node: NULL
plan: Total rows: 0

EXPLAIN ANALYZE 语句提供了每个执行阶段的指标。SeqScan 计划会扫描一个 region 的数据。

获取查询执行更详细的信息:

EXPLAIN ANALYZE VERBOSE SELECT * FROM monitor where host='host1';

样例输出:

*************************** 1. row ***************************
stage: 0
node: 0
plan: MergeScanExec: peers=[4612794875904(1074, 0), ] metrics=[output_rows: 0, greptime_exec_read_cost: 0, finish_time: 3479084, first_consume_time: 3476000, ready_time: 3209041, ]

*************************** 2. row ***************************
stage: 1
node: 0
plan: SeqScan: region=4612794875904(1074, 0), partition_count=0 (0 memtable ranges, 0 file 0 ranges), projection=["host", "ts", "cpu", "memory"], filters=[host = Utf8("host1")], metrics_per_partition: [[partition=0, {prepare_scan_cost=579.75µs, build_reader_cost=0ns, scan_cost=0ns, convert_cost=0ns, yield_cost=0ns, total_cost=789.708µs, num_rows=0, num_batches=0, num_mem_ranges=0, num_file_ranges=0, build_parts_cost=0ns, rg_total=0, rg_fulltext_filtered=0, rg_inverted_filtered=0, rg_minmax_filtered=0, rg_bloom_filtered=0, rows_before_filter=0, rows_fulltext_filtered=0, rows_inverted_filtered=0, rows_bloom_filtered=0, rows_precise_filtered=0, num_sst_record_batches=0, num_sst_batches=0, num_sst_rows=0, first_poll=785.041µs}]] metrics=[output_rows: 0, mem_used: 0, build_parts_cost: 1, build_reader_cost: 1, elapsed_await: 1, elapsed_poll: 17208, scan_cost: 1, yield_cost: 1, ]

*************************** 3. row ***************************
stage: NULL
node: NULL
plan: Total rows: 0

EXPLAIN ANALYZE VERBOSE 语句会展示计划执行阶段更详细的指标信息。