EXPLAIN和PROFILE

EXPLAIN语句输出nGQL语句的执行计划,但不会执行nGQL语句。

PROFILE语句执行nGQL语句,然后输出执行计划和执行概要。用户可以根据执行计划和执行概要优化查询性能。

执行计划

执行计划由Nebula Graph查询引擎中的执行计划器决定。

执行计划器将解析后的nGQL语句处理为actionaction是最小的执行单元。典型的action包括获取指定点的所有邻居、获取边的属性、根据条件过滤点或边等。每个action都被分配给一个operator

例如SHOW TAGS语句分为两个actionoperatorStartShowTags。更复杂的GO语句可能会被处理成10个以上的action

语法

  • EXPLAIN

    1. EXPLAIN [format="row" | "dot"] <your_nGQL_statement>;
  • PROFILE

    1. PROFILE [format="row" | "dot"] <your_nGQL_statement>;

输出格式

EXPLAINPROFILE语句的输出有两种格式:row(默认)和dot。用户可以使用format选项修改输出格式。

row格式

row格式将返回信息输出到一个表格中。

  • EXPLAIN

    1. nebula> EXPLAIN format="row" SHOW TAGS;
    2. Execution succeeded (time spent 327/892 us)
    3. Execution Plan
    4. -----+----------+--------------+----------------+----------------------------------------------------------------------
    5. | id | name | dependencies | profiling data | operator info |
    6. -----+----------+--------------+----------------+----------------------------------------------------------------------
    7. | 1 | ShowTags | 0 | | outputVar: [{"colNames":[],"name":"__ShowTags_1","type":"DATASET"}] |
    8. | | | | | inputVar: |
    9. -----+----------+--------------+----------------+----------------------------------------------------------------------
    10. | 0 | Start | | | outputVar: [{"colNames":[],"name":"__Start_0","type":"DATASET"}] |
    11. -----+----------+--------------+----------------+----------------------------------------------------------------------
  • PROFILE

    1. nebula> PROFILE format="row" SHOW TAGS;
    2. +--------+
    3. | Name |
    4. +--------+
    5. | player |
    6. | team |
    7. +--------+
    8. Got 2 rows (time spent 2038/2728 us)
    9. Execution Plan
    10. -----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------
    11. | id | name | dependencies | profiling data | operator info |
    12. -----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------
    13. | 1 | ShowTags | 0 | ver: 0, rows: 1, execTime: 42us, totalTime: 1177us | outputVar: [{"colNames":[],"name":"__ShowTags_1","type":"DATASET"}] |
    14. | | | | | inputVar: |
    15. -----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------
    16. | 0 | Start | | ver: 0, rows: 0, execTime: 1us, totalTime: 57us | outputVar: [{"colNames":[],"name":"__Start_0","type":"DATASET"}] |
    17. -----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------
参数说明
idoperator的ID。
nameoperator的名称。
dependencies当前operator所依赖的operator的ID。
profiling data执行概要文件内容。 ver表示operator的版本;rows表示operator输出结果的行数;execTime表示执行action的时间;totalTime表示执行action的时间、系统调度时间、排队时间的总和。
operator infooperator的详细信息。

dot格式

dot格式将返回DOT语言的信息,然后用户可以使用Graphviz生成计划图。

Note

Graphviz是一款开源可视化图工具,可以绘制DOT语言脚本描述的图。Graphviz提供一个在线工具,可以预览DOT语言文件,并将它们导出为SVG或JSON等其他格式。详情请参见Graphviz Online

  1. nebula> EXPLAIN format="dot" SHOW TAGS;
  2. Execution succeeded (time spent 161/665 us)
  3. Execution Plan
  4. --------------------------------------------------------------------------------------------------------------------------------------------- -------------
  5. plan
  6. --------------------------------------------------------------------------------------------------------------------------------------------- -------------
  7. digraph exec_plan {
  8. rankdir=LR;
  9. "ShowTags_0"[label="ShowTags_0|outputVar: \[\{\"colNames\":\[\],\"name\":\"__ShowTags_0\",\"type\":\"DATASET\"\}\]\l|inputVar:\l", shape=Mrecord];
  10. "Start_2"->"ShowTags_0";
  11. "Start_2"[label="Start_2|outputVar: \[\{\"colNames\":\[\],\"name\":\"__Start_2\",\"type\":\"DATASET\"\}\]\l|inputVar: \l", shape=Mrecord];
  12. }
  13. --------------------------------------------------------------------------------------------------------------------------------------------- -------------

将上述示例的DOT语言转换为Graphviz图,如下所示。

Graphviz graph of EXPLAIN SHOW TAGS


最后更新: October 27, 2021