Doris 功能介绍-导入分析

c4844882-3c3e-4fbc-9e79-e1650c211af4.png


## 导入分析



在 0.14 版本中,Doris 提供了一个图形化的命令以帮助用户更方便的分析一个具体的查询或导入。本文介绍如何使用该功能分析一个导入请求。


> 该功能目前仅针对 Broker Load 的分析。

> 该功能需升级至0.14.7版本。

> 查询分析请参阅 《Doris 功能介绍-查询分析》


### 导入计划树



如果你对 Doris 的查询计划树还不太了解,请先阅读之前的文章 [Doris 功能介绍-导入分析]。


一个 Broker Load 请求的执行过程,也是基于 Doris 的查询框架的。一个Broker Load 作业会根据导入请求中 DATA INFILE 子句的个数讲作业拆分成多个子任务。每个子任务可以视为是一个独立的导入执行计划。个导入计划的组成只会有一个 Fragment,其组成如下:


843ad6ac-2d4b-4116-aa0a-9c4652e246b8.png


BrokerScanNode 主要负责去读源数据并发送给 OlapTableSink,而 OlapTableSink 负责将数据按照分区分桶规则发送到对应的节点,由对应的节点负责实际的数据写入。


而这个导入执行计划的 Fragment 会根据导入源文件的数量、BE节点的数量等参数,划分成一个或多个 Instance。每个 Instance 负责一部分数据导入。


多个子任务的执行计划是并行执行的,而一个执行计划的多个 Instance 也是并行执行。


### 查看导入 Profile



用户可以通过以下命令打开会话变量 `is_report_success`:


`SET is_report_success=true;`


然后提交一个 Broker Load 导入请求,并等到导入执行完成。Doris 会产生该导入的一个 Profile。Profile 包含了一个导入各个子任务、Instance 的执行详情,有助于我们分析导入瓶颈。


> 目前不支持查看未执行成功的导入作业的 Profile。


我们可以通过如下命令先获取 Profile 列表:

mysql> show load profile "/";+---------+------+-----------+------+-----------+---------------------+---------------------+-----------+------------+| QueryId | User | DefaultDb | SQL  | QueryType | StartTime           | EndTime             | TotalTime | QueryState |+---------+------+-----------+------+-----------+---------------------+---------------------+-----------+------------+| 10441   | N/A  | N/A       | N/A  | Load      | 2021-04-10 22:15:37 | 2021-04-10 22:18:54 | 3m17s     | N/A        |+---------+------+-----------+------+-----------+---------------------+---------------------+-----------+------------+2 rows in set (0.00 sec)


这个命令会列出当前保存的所有导入 Profile。每行对应一个导入。其中 QueryId 列为导入作业的 ID。这个 ID 也可以通过 SHOW LOAD 语句查看拿到。我们可以选择我们想看的 Profile 对应的 QueryId,查看具体情况。


查看一个Profile分为3个步骤:


1. 查看子任务总览


    通过以下命令查看有导入作业的子任务概况:


mysql> show load profile "/10441";+-----------------------------------+------------+| TaskId                            | ActiveTime |+-----------------------------------+------------+| 980014623046410a-88e260f0c43031f1 | 3m14s      |+-----------------------------------+------------+


    如上图,表示 10441 这个导入作业总共有一个子任务,其中 ActiveTime 表示这个子任务中耗时最长的 Instance 的执行时间。


2. 查看指定子任务的 Instance 概况


    当我们发现一个子任务耗时较长时,可以进一步查看该子任务的各个 Instance 的执行耗时:

    

mysql> show load profile "/10441/980014623046410a-88e260f0c43031f1";+-----------------------------------+------------------+------------+| Instances                         | Host             | ActiveTime |+-----------------------------------+------------------+------------+| 980014623046410a-88e260f0c43031f2 | 10.81.85.89:9067 | 3m7s       || 980014623046410a-88e260f0c43031f3 | 10.81.85.89:9067 | 3m6s       || 980014623046410a-88e260f0c43031f4 | 10.81.85.89:9067 | 3m10s      || 980014623046410a-88e260f0c43031f5 | 10.81.85.89:9067 | 3m14s      |+-----------------------------------+------------------+------------+

    

    这里展示了 980014623046410a-88e260f0c43031f1 这个子任务的四个 Instance 耗时,并且还展示了 Instance 所在的执行节点。


3. 查看具体 Instance


    我们可以继续查看某一个具体的 Instance 上各个算子的详细 Profile:

    

mysql> show load profile "/10441/980014623046410a-88e260f0c43031f1/980014623046410a-88e260f0c43031f5"\G*************************** 1. row ***************************Instance:      ┌-----------------------------------------┐      │[-1: OlapTableSink]                      │      │(Active: 2m17s, non-child: 70.91)        │      │  - Counters:                            │      │      - CloseWaitTime: 1m53s             │      │      - ConvertBatchTime: 0ns            │      │      - MaxAddBatchExecTime: 1m46s       │      │      - NonBlockingSendTime: 3m11s       │      │      - NumberBatchAdded: 782            │      │      - NumberNodeChannels: 1            │      │      - OpenTime: 743.822us              │      │      - RowsFiltered: 0                  │      │      - RowsRead: 1.599729M (1599729)    │      │      - RowsReturned: 1.599729M (1599729)│      │      - SendDataTime: 11s761ms           │      │      - TotalAddBatchExecTime: 1m46s     │      │      - ValidateDataTime: 9s802ms        │      └-----------------------------------------┘┌-----------------------------------------------------┐│[0: BROKER_SCAN_NODE]                                ││(Active: 56s537ms, non-child: 29.06)                 ││  - Counters:                                        ││      - BytesDecompressed: 0.00                      ││      - BytesRead: 5.77 GB                           ││      - DecompressTime: 0ns                          ││      - FileReadTime: 34s263ms                       ││      - MaterializeTupleTime(*): 45s54ms             ││      - NumDiskAccess: 0                             ││      - PeakMemoryUsage: 33.03 MB                    ││      - RowsRead: 1.599729M (1599729)                ││      - RowsReturned: 1.599729M (1599729)            ││      - RowsReturnedRate: 28.295K /sec               ││      - TotalRawReadTime(*): 1m20s                   ││      - TotalReadThroughput: 30.39858627319336 MB/sec││      - WaitScannerTime: 56s528ms                    │└-----------------------------------------------------┘

    

上图展示了子任务 

980014623046410a-88e260f0c43031f1 中,

Instance 

980014623046410a-88e260f0c43031f5 

的各个算子的具体 Profile。

    

通过以上3个步骤,我们可以逐步排查一个导入任务的执行瓶颈。




END



 > 关于 Profile 中各个参数的具体说明,我们还在不断完善和修改中,会在后续的文章中详细说明。



【精彩文章】

Apache Doris Roadmap 2021

【遇见Doris】Doris的数据导入事务及原子性保证

【Doris全面解析】Doris SQL 原理解析


欢迎扫码关注:

acbb8827-e1a3-41fc-8fef-2cad444b0931.jpg

Apache Doris(incubating)官方公众号



相关链接:

Apache Doris官方网站:

http://doris.incubator.apache.org

Apache Doris Github:

https://github.com/apache/incubator-doris

Baidu Doris 官方网站

https://doris.baidu.com

Baidu Doris Github:

https://github.com/apache/incubator-doris

Apache Doris 开发者邮件组:

dev@doris.apache.org

                                                                           086c2a0c-3898-4552-98a9-444e06f2f8bf.png



本文分享自微信公众号 - ApacheDoris(gh_80d448709a68)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ApacheDoris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值