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

Doris 增量数据刷新方案

  •  1
     
  •   KJH · May 15 · 2063 views
    This topic created in 34 days ago, the information mentioned may be changed or developed.

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

    目前我们引入了 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  
       May 15   ❤️ 1
    帮楼主顶一个,顺便问下,选型没考虑 starorcks 吗
    KJH
        2
    KJH  
    OP
       May 15
    @BlueBing 没用阿里云
    Jim2Chen
        3
    Jim2Chen  
       May 15   ❤️ 1
    帮楼主顶一个
    KJH
        4
    KJH  
    OP
       May 15
    没大佬来哇 。。完啦
    yaoyuan7571
        5
    yaoyuan7571  
       May 15   ❤️ 1
    我看官方文档 ANALYZE 命令不是支持同步参数 WITH SYNC 吗,试试?
    coefu
        6
    coefu  
       May 16
    加他们群问。
    Oldletter
        7
    Oldletter  
       May 16   ❤️ 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
       May 17
    @yaoyuan7571 不行 当表重新重建后,如果立刻执行表收集信息并且带了 with sync , 统计出来的还是 0
    KJH
        9
    KJH  
    OP
       May 17
    @Oldletter RF 裁剪是默认关的,这个之前确认过没问题, 然后主键模型这个确实也考虑过,不过一直懒得改,抽时间我试下

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

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

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