【已解决】使用 routine load 向自动分区导入数据比非自动分区的导入速度显著的慢

Viewed 78

版本:drois 2.1.2
现象:使用routine load向自动分区和非自动分区表导入数据,发现非自动分区的速度快很多。

查文档得知有 :
olap_table_sink_send_interval_microseconds 数据发送的监测间隔
olap_table_sink_send_interval_auto_partition_factor 自动分区的监测间隔系数。

如果我需要自动分区和非自动分区的导入速度保持一致,这个参数应该写成 1么?

问题如下:

  1. 自动分区的实际间隔值是乘法(olap_table_sink_send_interval_microseconds * olap_table_sink_send_interval_auto_partition_factor),还是除法呢(olap_table_sink_send_interval_microseconds/olap_table_sink_send_interval_auto_partition_factor)
    如果是乘法的话,应该会更快监测数据变化,实际情况和这个相反的。
  2. 为什么要在导入数据时,区分是否是自动分区呢
  3. 建议的值是多少,在 0.001增加还是减少呢
1 Answers

这个运算是乘法。

数据发送间隔既不能太高也不能太低,太高的话发送数据线程空跑会占用CPU资源,太低的话数据会发生拥塞现象。因此需要一个比较好的经验值。

由于 auto partition 在导入数据时要进行额外操作,例如创建分区等,数据从到达 sink node 到准备好发送的时间,和非 auto partition 不一致,我们经过测试确定了一个经验参数,用来在 auto partition场景调整更优的数据发送间隔。

0.001 的意思是等待时间变为原先的 1/1000。这个值可能影响 load 任务性能,您可以根据具体场景尝试自行调整验证。另外,该变量和逻辑仅在非前移导入路径上有效,前移导入路径有另一套处理方式,这两个间隔变量不再生效。前移路径理论上也会有更好的时间表现。

SessionVariable enable_memtable_on_sink_node 为 true 时,开启前移路径。
您可以对比您的场景下是否开启前移的性能表现,并选择更好的导入路径。