00:00
我们可以通过。提供的cor profile功能来了解一下我们执行的circle的一个性能问题,那我们只有知道它的慢的地方在哪里,我们才能去做出进一步的处理,是吧啊。那这个是cor profile,那主要是什么呢?是fe这边前端页面做一个展示。那基本原理呢,就是我们fe在生成查询计划的时候。它会拆分成一个一个的fragment下发给be进行呃,具体的执行。那B在执行的时候,它会记录当前fragment的一个。一些统计信息啊,并且会将这一些统计信息输出到日志当中,那在Doris里面有一个参数啊,这个参数呢,可以将这些统计值啊回传给fe,那fe呢,在word表页面上打印出结果,那其实这个功能在前面我们演示案例的时候是看过的,呃,就比如说我们在讲那个运行时过滤啊,RA Fiat。
01:12
当时呢,我们也是通过前端页面去查看的一个过滤的效果是吧,那我们现在一起来做一下啊,那首先呢,还是开启这么一个参数enable profile,那我们先看一下啊variables。啊,我直接这么查吧,啊往上翻。这里有一个perfect,默认呢,就是false false就表示be的统计信息啊,在fe上啊,就不回传了,那它还是记录在log里面,为了方便查看,我们将它打开啊。把这个参数名啊,直接考一下。Profile等于更改完之后,我们直接执行我们的查询circle就可以了,那么在前端页面我们就可以看到,对吧,那比如说我这边还是做了一个交啊,就没什么操作啊。
02:12
好,拷贝粘贴回车,好,那这个查询结束了,这个时候我们只需要打开fe的界面。那么你要注意你当前连接的是哪个F1节点,那么你就要到对应的页面去查看,比如说我现在连接的是哈一这个节点。呃,然后呢,是800对吧,就D端口。进来之后啊,比如说我用root登录。登录完还是老地方,这里有一个profile啊,点进来,那么可以瞅一瞅,是不是有一个刚刚执行的一个查询语句,对吧,这个就是一些profile profile信息,那我们可以点进来。你看有一大堆的统计信息,那怎么看呢?
03:04
这边统计最多的就是一些执行的时长,大家可以看到很多都是,呃,纳秒也好,毫秒也好,对吧,都是一些时间,那可能这么多大家不一定看得懂。那我们就把每个参数都给大家列出来了,所以呢,在后面一个小节,我将每一个模块的参数什么意思啊都列出来了,那在这里呢,大家可以呃针对性的去看就行了啊,我们简单来看几个啊,比如说首先第一个啊。Fragment。就是从这里开始,我们说每个fragment是不是发送给be,拆分给的be去执行,对吧,那这里有多个fragment,那比如说这里有零啊再往下翻。啊,是不是有FRAGMENT1对吧,再往下翻看还有没有拆分啊。你看是不是还有一个FRAGMENT2对吧,好。那在这里面主要包含了哪些东西啊?
04:07
那我截个图啊。好。那比如说我们能看到了一个什么呢。至少我们目前能看到给大家解读一下啊,这个是很明显吧,CPU的执行时间对吧,有一些你通过名字就知道了啊,那我们再看这个也是什么内存限制。啊,查询是内存限制八个G,这个是因默认是多少,是不是两个G啊,啊,那为什么变成八,我们在前面演示,呃,讲到第五章查询的时候,是不是修改过这个参数是以global的方式,对吧。那对应在这能看好,那再往下看一个内存。Memory。这个就是什么使用时的一个峰值,整个实例在查询时的一个峰值啊峰值其实我们才看到才用了90K对吧,因为本身两张表没有什么数据。
05:13
还有一个。Rose product处理列的行数。啊,一共几号数据啊。那这些都很直白啊。再比如说下面还有一个。那这一块呢,你同样对应这边没有全部列出来啊,列了几个让大家作为呃,重要信息啊,那么看,比如说这个。啊,在这里。这创建的broke数量,还有这个recycle重用的对吧,重用的,那这些你就是看习惯了,第一次看不熟了,你就可以针对着文档去看每一个是什么意思,大部分应该是能看得懂的啊,顾名思义都能够达到。
06:00
啊,比如说写了多少个啊。落盘的写的数据量啊,没有对吧,还有这个什么最大的rock大小,你看参数名就能猜到,还有这个是不是总的八份一个等待时长。对不对。还有类似像什么读取block的总耗时等等,那这个快速看完再往下看,在flag fragment里面还有一个data是最深的,那这里面我们现在不看参数看的吗?他看得懂是不是发送的字节数啊,忽略的函数对吧,本地字节发送的数量对吧。这是阈值。Overall,这是一个吞吐相关的,对吧,这个是不是峰值内存使用啊,序列化批次时间。对吧,未压缩的行批次大小,那其实你再过来看这里,呃,过滤函数总数据量还有什么。
07:01
本机节点logo嘛,这个我们刚才都看了,吞吐量啊,序列化耗时压缩前的大小对吧,那这个对应去查看就行,那在fragment还有一个什么关于join的信息对吧,可能有携带这个。就弄,那还会有什么?还有一个什么数据交换的节点,还有一个扫描节点。那基本上一个fragment里面就有这么多东西啊,分为这几类信息啊,那对应的每个信息什么意思呢?啊,可以去大家看就行了,过多了咱们就不挨个去看啊,都特别详细啊,什么大小时间呢,数量啊,函数啊,都特别直白啊。那这是我们查看的一个方式,这是每个fragment都是每个be节点执行的一些信息啊,那在最上面是不是有一个总览,总览呢?有一个起始时间,结束时间,还有一个总耗时,对吧,还有查询的类型。
08:07
其他的没什么了,呃,用户是谁啊,数据库是哪一个,Circle是哪一个语句对吧,有没有做catch。好。那通过这个profile,我们去针对性的查看具体的。你可以先查看什么,查看总耗时啊总耗时。总号时看看这个时间是太长了还是怎么样,第二一个你可以查看一下执行期,呃时候的一些具体的时间分布啊,这500多毫秒是怎么分布的,那如果还发现某一块慢,你可以具体再去看这flaggment对吧,每一个都去瞅一眼,对应的每一个模块,你是交慢,你可以看一下交的那个节点。对吧。那如果是杀手呢?啊,交换数据慢,你看一下是不是这个意思,Change时间长了。
09:00
类似的,按照这个思路去看。那还有呢,一个给大家介绍一个有一个调试方式,这个是官网给到的啊,就是如果你要进一步的去查看它的内存情况啊,CPU情况,现成情况,那这个都可以啊,借助一些工具就行,因为这个比较简单,我们就不去做啊,不去慢慢去操作这样。比如说我们随便看一眼啊,对于fe的调试,我要统计内存使用明细,这其实依赖于Java的一个j map命令是吧?啊,因为我们知道fe是一个Java程序,类似的JM使用J。打印线程j stack啊,这个也都不是什么Doris特有的,这纯粹就是一个账号命令啊,那be的调试就是借助一些工具啊,借助一些工具。那你就对应的按照他的方式去安装就可以去查看了。对吧。
10:00
你看就列出了一些统计信息一样的啊,这个是你在进深入进行调试的时候啊,查看的时候再去看,看CPU的,看内存的,你看这玩意儿,但这需要你有一定的基础,对吧,要不然你看了也是白看。大部分场景呢,其实我们通过什么呢?呃,通过cor profile查看它慢的地方,然后对应的你该优化circle,去优化circle,呃,如果SQL优化不了,我们再去考虑有没有什么功能,什么参数可以去设置解决这个问题啊,大部分这样是够的啊。
我来说两句