00:00
那在1.0里面最重要的一个更新呢,就是向量化执行引擎。那这个词大家并不陌生,因为在很多oip的数据库里面都会有这么一种优化措施,像click house啊,还有其他的一些,对吧?甚至我们常用的have里面也有一个向量化的功能,那向量化是什么意思啊?如果我们直白来讲就是。自动把门做了。一个性能上的优化啊。那传统的一个SQ执行引擎是基于行式的。那么简单来讲,就是我一条指令,因为这个涉及到底层一点的原理了,咱们简单点讲啊,一条指令呢,它只会去处理一行数据。这种就是传统的行式的一个执行引擎,那么向量化执行引擎呢,它基于现代的CPU,现在不一样了,对吧,现代CPU啊,它呃,比如说那个叫什么SIM啊。
01:04
那比如说他一个指令。这一次啊,他就可以处理什么一批数据,那这样效率是不是得到了提升啊,对吧,是不是减少了这个指定的执行次数。这是涉及到什么CPU底层的一个寄存器啊,等等一些东西啊,我们简单说,呃,简单理解一下,那现在一条指令可以处理多条数据,就一批数据,那这样整体来讲效率啊就得到了一个提升。对吧。你看但是呢,这种一般是出现在劣势存储的数据库才有,对吧,现代化执行肯定是只有在劣势存储的时候才有用啊。那么呃,具体细节我们看,如果你感兴趣,这边我粘了两个文章啊。你可以简单了解一下。你看克里卡耗子也有吧,什么矢量化查询,还有power DB。
02:06
等等一些东西,那这边有一些介绍。啊,现在我们就不展开了。呃,还有一个知乎。也有别人分享啊。啊,向量化执行简单理解就是为了消除程序循环的优化,你现在一个指令执行一行,那你有,呃,很多行数据都要的话,它是不是要很多个指令要去循环去执行,对吧?那现在一个指令多行,那就简单了,那还有一个我刚才提到SIM。这个是在CPU的寄存器层面实现了一个什么并行操作啊。那包括我们熟知的click house也是基于4.2这么一个指令集实现的。那这一块不需要我们去关心。我们也没法去改什么东西啊,那唯一我们能做的是开启向量化执行的功能,那首首先呢,我们从使用上,第一个有一个绘画集的变量。
03:08
叫。向量化引擎默认呢是false,我们把它制成处将它打开,第二一个我们不是说了吗?它一次是不是可以处理一批数据啊,那么这一批数据是多少呢?就是通过这个参数来指定啊,那官方建议是我们配置为4096。那默认值呢,是1024啊,我们来看一下这个变量吧,受。现在是在1.0里面对吧,Variables。呃,我们找一找enable里面有没有一个,诶这里。这是不是向量化引擎默认是false,那还有一个be size默认呢,是1024,那现在我们就是要改这两个东西啊,直接set就可以了。
04:00
开,这样呢,我们就开启了一个向量化。下量化之后呢,我们怎么去查看验证它生效的呢?哎,我们准备一张表。这张表其实是在我们前面创建过了,就U乐表,那现在我们是一个新的环境,在1.0的Doris里边,那我们再创建一遍啊。建表我现在是在test DB下面啊。呃,我看看啊。需要三个啊,那就是副本数啊,因为我们现在是单机的,对吧,那我把副本数啊也设成一个,那你看我改造啊。我顺便也放到我们这个地方吧。方便大家去使用。把副本数指定为一,那就OK了嘛。
05:00
好了,现在就创建成功了,Show tables。Select from you了,现在是空的对吧?那我们插入几条数据。好在的心不容易了。现在有这么几条数据啊。接下来我们通过查询计划就能判断这个执行,呃,向量化引擎有没有生效啊,Explain,比如说在新from u了,那么在这里找一找呗。大家呃,注意观察啊,那哪些地方有区别,第一个这个op扫描节点前,前面加了一个什么V,好再往上走。这个意思,Change多了一个什么V?Result think多了一个什么V?那么如果你成功开启了向量化引擎呢?那么在执行计划里面很多个地方你都能看到前缀V。
06:06
那说明呢,那就OK了。那如果你觉得不需要,那可以随时可以关掉那向量化引擎呢,我们大家呃,有一些注意事项要跟大家聊一聊,第一个呢是闹纸。呃,在我们向量化执行引擎里面,那值会导致什么呢?性能劣化,也就是说不一定性能会更好。那所以我们用的时候建议是什么?建表的时候对应的列设置为什么not now。这是建议啊,不是说必须你不设也行,但可能性能没那么达到预期,你像我前面建表,其实我都指定什么notno,那有的人就问了,那如果我业务上我就是得有一个闹值,那怎么办呢?那你可以用一些默认值或其他业务上没有意义的呃值来替代,比如说数字,比如说数字你。
07:01
没意义,比如说你可以给个零麦。那比如说字符串啊,字符串类型的,你可以给个空串的。啊,就是用这种替代方案来实现,这是第一个not子啊注意的第二一个跟传统的航程的执行引擎的一个差异在哪里。呃,主要分两类啊,第一类呢,是。回头,呃,航存引擎这些要被丢弃,或者。不推荐使用的一些功能,第一个呢是我们的浮点型flow跟double,它有一个精度误差,对吧,它会影响小数点后五,呃,小数点后面五位之后的数字,那如果对精度有特别有要求,我们还是用dison。另外呢,就时间日期类型data time,我们说是支持到秒级对吧,那么如果你是要到秒级以后啊,如果在向量化引擎后面会直接丢弃。会直接丢弃啊,只能到秒级。
08:02
那么还有一个呢,就。有符号类型啊,这写错了,应该是符号,有符号类型,比如说零跟负零,那么在向量化里面认为是相等的,是同一回事,那你要注意这种带符号的业务上是不是要做区分。对吧,这样会影响像我们discount distinct的,还有group这些计算结果啊。还有呢,就是bit,还有log log。在里面呢?输入均为now,则输出结果为闹而不是零。对吧,也就是说我输入的时候是个,那我输出的时候会变成什么零。啊不不输出的结果也会变成闹啊不不是零啊,就这几个细节啊,提醒一下第二一类呢。呃,是目前。还不支持,但是未来可能会进一步的去优化和实现的啊,就是目前1.0版本这些事儿还做不到。也不是还做不到,还还还没做到,第一个呢,是不支持原有的udf跟udf,那其实即使是行式引擎呢,这个udf模块还是处于一个,呃开发实验阶段啊,那么直接上生产的话可能。
09:15
还不到时候啊,还不到时候。那其实我们通过安装包里面是不是有个udf文件夹呀,对吧,那里面现在是已经开发到一定阶段了啊。另外就是stream stream类型我们之前介绍是不是最大是2G啊,对吧,那么在1.0里面,目前如果是向量化引擎,它最大长度是一兆,而不是2G。那这个时候会有什么问题呢?我们查询和导入的时候,大于一兆的字符串,呃,它没法得到结果。那么。这个时候你可以选择先把向量化关闭,然后再正常的去做查询,正常去做导入,这是允许的啊。你就把它当成一个功能性的开关啊,选择性的开启关闭就好了。
10:03
还有呢,我们之前导出的时候介绍过一个什么。呃,查询结果导出,那这种呢,如果我们是向量化引擎,目前目前还不支持,但我们说了这这一类,下面提到这一类未来呢,可能会得到支持啊。另外呢,就不支持一个broker的外表啊。这还有错别字啊?那像这种,如果大家发现有错别字,比如说官网或者什么的描述错别字啊。啊,大家可以去提对吧,啊,去提你的意见建议啊,参与到我们的贡献来也,这个时候也是大家加入一个贡献的好时机啊。也欢迎大家去贡献。好,这个是向量化引擎要给大家聊的事,那么另外要提醒大家的一句就是什么?目前1.0向量化引擎是被标注为实验性功能。所以呢,呃,如果大家在生态环境要用的话,还是做好全面的一个测试啊,全面的测试。
我来说两句