• 请不要在回答技术问题时复制粘贴 AI 生成的内容
KJH
V2EX  ›  程序员

Doris 增量数据刷新方案

  •  1
     
  •   KJH · 8 days ago · 1859 views

    各位巨佬,真没招呀,在线拜求

    目前我们引入了 Doris 实时数仓,版本 2.1 ,FE 8c 32g BE 16c 32g

    数据处理流程是 数据进入到 Doris 后开始使用 Doris 的 insert into select 进行 dwd dwm dws ads 等层级的数据处理。

    由于都是业务数据,不是纯新增数据,所以都是主键模型。

    某个业务维护的相关表需要先根据 update_time 统计出关联的业务字段,写入到一张增量表中,最后由增量表作为驱动表。也就是在一个大的多表 JOIN sql 中,增量表作为 build 端,利用 RUNTIME FILTER 下推过滤大表数据从而实现表数据更新

    现在问题就出现在这个增量驱动表上,增量表数据很少可能也就 3 万~5 万区间,5 分钟跑一次,每次全量刷新。

    然后利用 ANALYZE TABLE 刷新增量表的统计新的,我没想到的是,增量表数据进去了以后,统计信息居然需要等 3 分钟在执行才能统计到条数,

    这也就导致 Doris 优化器 CBO 在利用统计信息判断 join 的时,增量表如果统计信息是 0,或者健康度太低,就不会走 RF ,从而进行全表扫描,导致OOM !!

    我尝试过使用 /*+ SET_VAR(disable_join_reorder=true) / 或/+ LEADING(a b c) */ 都不行,效率太差,内存使用更高,原本能成功的,用了这两个优化后失败率更高了。

    现在是我每两个小时执行一次增量表统计信息收集,然后 DORIS 的 ETL 任务能抗两小时,两小时后就开始报错 OOM 了。

    所以想请教下各位巨佬,Doris 不是各个大厂都在推么,难道没这种问题么?还是我使用方式错了,我人要麻了。。。

    14 replies    2026-05-20 09:57:33 +08:00
    BlueBing
        1
    BlueBing  
       8 days ago   ❤️ 1
    帮楼主顶一个,顺便问下,选型没考虑 starorcks 吗
    KJH
        2
    KJH  
    OP
       8 days ago
    @BlueBing 没用阿里云
    Jim2Chen
        3
    Jim2Chen  
       8 days ago   ❤️ 1
    帮楼主顶一个
    KJH
        4
    KJH  
    OP
       8 days ago
    没大佬来哇 。。完啦
    yaoyuan7571
        5
    yaoyuan7571  
       8 days ago   ❤️ 1
    我看官方文档 ANALYZE 命令不是支持同步参数 WITH SYNC 吗,试试?
    coefu
        6
    coefu  
       8 days ago
    加他们群问。
    Oldletter
        7
    Oldletter  
       7 days ago   ❤️ 2
    你这个场景是强依赖 RF 过滤大表,统计信息不准的时候 Doris 可能会把 RF 裁掉。先把 RF 裁剪关掉,看 Profile 里面 RF 有没有正常下推、有没有生效。

    另外我觉得这个增量驱动表没必要用主键模型。它本质上只是一个小的驱动表,每 5 分钟重建一次,用来过滤大表,不是真正的业务 upsert 表。可以考虑改成 Duplicate Key 表,加一个 batch_id ,每轮写一批新的数据,查询时带 batch_id 过滤,跑完再清老批次。这样比反复刷新同一张主键表更稳,统计也更容易控制。

    如果还不行,可以临时用手动注入统计信息兜底。反正这个小表大概就是 3 ~ 5 万行,不需要特别精确,只要别让优化器以为它是 0 行就行。

    最后建议升级一下 2.1 的小版本。2.1 早期在 row count 、统计信息、RF 这块确实有一些坑,后面的小版本修过一些类似问题。我记得 2.1.8 和 11 都修复过问题,升级完版本不行的话再调参数,按理说你这个最好不行就上新的版本算了。
    KJH
        8
    KJH  
    OP
       6 days ago
    @yaoyuan7571 不行 当表重新重建后,如果立刻执行表收集信息并且带了 with sync , 统计出来的还是 0
    KJH
        9
    KJH  
    OP
       6 days ago
    @Oldletter RF 裁剪是默认关的,这个之前确认过没问题, 然后主键模型这个确实也考虑过,不过一直懒得改,抽时间我试下

    然后手动注入这个我也考虑过,但是他有一个 update_rows ,就是每次我更新这个增量表后,这个 update_rows 也会变,当他大到一定程度以后,好像表的健康值就会下降,然后 CBO 判断就不会走 RF ,不过这个方案我也没试,不敢说有问题,抽时间我也试试

    主要是 Doris 是托管的,他们最高的版本只有 2.1.7 ,无语了都。。

    谢谢大佬
    KJH
        10
    KJH  
    OP
       6 days ago
    @Oldletter 而且就算我执行了统计信息收集,通过 show table stats 查看了表的数据量确实能统计出来, 然后 profile 里面,对于这个增量表的统计数量依然是 0 ,不知道是不是这个版本的 bug 。
    tchqiq
        11
    tchqiq  
       6 days ago   ❤️ 1
    拿聚合模型试一下,注意聚合键以及分桶要和 join 条件对齐
    KJH
        12
    KJH  
    OP
       5 days ago
    @tchqiq 我试试
    Oldletter
        13
    Oldletter  
       4 days ago   ❤️ 1
    @KJH 这么离谱最高是 2.1.7 卧槽
    明天我有空给你试试 我这本地好像是 2.1.11
    KJH
        14
    KJH  
    OP
       3 days ago
    @Oldletter #13 是啊。。很无语,好像存算分离的版本会高一些 3.多, 谢谢大佬哇
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2235 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 97ms · UTC 00:30 · PVG 08:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.