00:00
好,同学们,这节开始呢,我们给大家演示这个调优的操作,首先呢,把这个屏清一下。好,我们可以看到呢,这里面我给大家列了一行代码,诶,可以看到这是一个option。通过这个option呢,我们可以让这个我们的查询呢打开啊,它一个性能分析的功能。呃,首先呢,我们还是打开explorer,我们直接写个查询呢,来给大家演示一下。啊,我们要查询的这个指标呢,还是test in里面的go。直接点一下submit,我们之前呢讲实例呢,一直是用这个,呃,这个序列,现在呢,我们切换到这个啊,注意在这个啊查询构造器里面呢,没法实现这个功能,我们必须得写这个flash脚本。好,那么现在呢,我不开窗了,注意啊,把这个开窗的这个操作呢,给它去掉。啊,我只留这个range和filter,接下来呢,我们去在前面加上一个代码,我们现在呢把它截图啊,我们对着敲。
01:02
好,我现在呢,在我的这个,呃,最上面加上一些option。所以说是。L2,然后点1LE,你可以看到这里面有一个开启点击,诶等于给它赋个值。Query,还有operator。PERA。啊,那么这里需要注意的就是这个包呢,需要去引一下。哎,那么这里呢,直接import就可以了,我们把这个屏呢放大一下。直接呢去import。好,现在呢,我们去点萨。你可以看到呢,这个数据呢,还是正常的显示出来,但是呢啊,其实呢,已经略微发现了一些不同的地方,我们可以点击VI road查看原始数据。
02:05
把这个底下的这个翻页呢,翻到最后一页,好,我们往下拉一下。也可以看到呢,这里面哎,多出来两张表,多出来两张表呢,这里面可以看到有一个measurement啊,有一个呢,名字叫profile query,然后另外一个呢,叫profile operator啊,那么query呢,它这个什么意思啊,我可以先给大家说一下,其实呢,这个里面是指啊,我们整个整个查询啊,整个脚本的一个性能的分析啊,那么我们可以看一下这里面都有什么。啊,我在这个文档里面呢,给大家列了一下啊,就是它这个显展示出来的信息都有什么东西啊,这里呢,可以先给大家看几个简单的,比如说呢,这个compel,其实就是我们的一个编译时间,也就是我们发DB呢,去执行这个脚本,需要把这个脚本呢,呃,转换成一个可以执行的机器程序。那么这个过程的时间就是我们这里的compel。
03:04
另外呢,还有就是这个是我们整个查询执行的一个消耗时间。哎,好,后面呢,这个Jason,这个像Jason一样东西啊,这个其实是他的执行计划。哎,拖动底下这个有个条啊,给水平拖动。啊之后呢,我们可以看到这里面有很多,比如说这个扫描的啊,这个读磁盘扫描的这个字节数。哎,包括这个扫描到多少条。以及这个我们分配的内存啊,还有这个呃,做这个计划的时间,呃,在队列里面排队的时间等等等等啊很多。呃,再往下呢,这个还有一个是profile operator这个里面呢,其实是我们,呃,每一个操作。可以看到啊,这里面啊,这些操作的一个算子,就这个像这个这个管道的函数,比如说我们在这里呢,再加一个啊代码我去set,那么set呢,就是可以给我们这个数据呢,再加一列,加一列什么呢,随便加一列吧,比如说hello word。
04:04
K是海,然后value呢是word,好,我们现在呢在submit。现在还需要看到最后一页啊,看最后一页诶可以看到呢,这里面有一个诶两个可以看到,现在有两个operator,实际上呢,就是两个步骤。啊,为什么我这里面有12344个函数,但是两个步骤呢,哎,因为位次下推了,这个地方呢,我们可以说from range和filter呢,它们三个合成了一步操作,哎在数据的没有进入内存之前呢,就已经把这个过滤呢给完成了,所以说呢,我们可以看到这里面有一个叫morrge的,也就是合并的意思,Read range for,也就是它读取了一个范围,再加上一个过滤的一个操作,哎那么它呢,这这几步呢,就合成一步了。啊,那么合成一步意味着什么呢?合成一步就意味着位次下推啊,你可以看到这个读取范围和filter呢,啊,它变成了一步,是不是相当于我们之前在PPT里面给大家展示的这个位次下推的效果呢?我们看一下。
05:10
哎,是不是变成这样一步了呢?就是这个过滤条件和读取的操作在一块执行,可以看到我们现在就是I readid读取啊,还有这个range和filter操作呢,在一块执行啊,那么这就说明呢,我们实现了位置下推啊,后面的操作示例我们会给大家看一下这个代码呢,呃,你如何编写呢?它会影响这个位置下推啊,那么这里呢,我们可以先关注一下啊,除了这个label之外的其他的字段。啊,我们可以看到呢,这边有这个它的执行的持续时间啊,但是可以看到呢,这个持续时间分最大的持续时间,平均的持续时间和最小的持续时间,然后我们第一个操作呢,你可以看到最大平均和最小都一样啊下面这个呢,它有一些区别,呃,为什么会分成这个持续时间的不同的这个大小呢,其实是取决于我们这个操作它执行多少次啊,这个取决于我们底层的这个执行引擎,它去决定我们的这一个operator啊,去怎么样去执行,去调用多少次啊,在这里可以看到呢,这个set呢,被调用了三次,在这里写一个COUNT3,这个count呢,就是它执行的次数,那么在这三次里面呢,最长的一次持续时间是这个二开头的,然后平均的持续时间呢,是这个一开头的,然后最小的持续时间呢,就是这个2227了,最右边这里有一个是我们的这个操作的类型,可以看到呢,第一个操作是一个读取过滤数据源的过,呃,这个操作可以看到这个它的字面意思啊,另外呢,就是我们的一个啊第二个操作。
06:35
这个set操作呢,你可以看到它是一个转换操作啊,叫做transform transformation呃,那么这里呢,关于更详细的解释呢,可以参考我这个翻译的官方文档。啊,在这个下方。啊,可以看在这里,呃,这个是query的一些相关的指标,另外呢,就是这个op operator相关的指标啊,要注意呢,我们这里面凡是duration啊,Du结尾的这些跟时间相关的,跟执行直间相关的这个字段,它的单位呢都是纳秒啊,所以说这里的时间单位呢,都是纳秒啊,然后呢,这个option你可以只设query,也可以只设operator啊,依据你自己的需求呢去设。
07:16
我把这个query和oper operator都设上呢,就是我们可以同时查看query和operator的指标啊,现在呢,我只设了query,你可以发现的这个operator呢就没有了啊,所以说这就是我们整个查看Fla脚本执行性能的一个方法和工具。好,那么从下一节开始呢,我们会在这个脚本的基础之上,哎大带着大家呢,去做这个更完整的性能分析,到时候呢,我们会哎逐渐比较这个不同的写法呢,会对性能产生什么样的影响。
我来说两句