数据仓库服务 GaussDB(DWS)-做结果表:常见问题

时间:2025-01-26 10:51:37

常见问题

  • Q:writeMode参数设置什么值比较合适?

    A:根据业务场景分update(只更新存在的数据)和upsert(对于同一主键数据如果存在就更新,不存在就新增一条数据)两个类型,推荐直接使用auto方式即可,该方式下会根据数据量的大小自动选择,如果数据量较大会增大攒批参数autoFlushBatchSize,即可提升入库性能。

  • Q:autoFlushBatchSizeautoFlushMaxInterval怎么设置比较合适?
    A:autoFlushBatchSize参数用于设置最大攒批条数,autoFlushMaxInterval参数用于设置最大攒批间隔,两个参数分别从时间和空间维度管控攒批。
    • 通过autoFlushMaxInterval可保证数据量较小时的时效性,如对时效性无强制要求通常不建议设置的太小,建议不低于3s走默认值即可。
    • 通过autoFlushBatchSize可控制一批数据的最大条数,一般来说攒批量越大,对于整体入库性能会更好,对性能来说通常该参数的设置推荐越大越好,参数的设置根据业务数据的大小以及flink运行内存来设置,保证不内存溢出。

      对于大多业务来说无需设置autoFlushMaxInterval,将autoFlushBatchSize设置为50000即可。

  • Q: 遇到数据库死锁了怎么办?

    A:通常出现死锁大致分为行锁死锁和分布式死锁。

    • 行锁:该场景通常为同一主键数据的并发更新造成行锁,该情况可以通过对数据做key by解决,key by必须根据数据库主键做,保证同一个主键数据会在同一个并发中,破坏掉并发更新的条件,无法造成死锁。Flink SQL做key by需要Flink本身支持,对于 DLI / MRS 均能实现,如MRS flink通过增加参数“key-by-before-sink=true”可实现key by。具体怎么使用以实现方为准,对于无法使用的建议使用API方式入库。
    • 分布式死锁:该场景通常为列存表的并发更新造成分布式死锁,暂无法解决,建议使用行存或者hstore。
support.huaweicloud.com/tg-dws/dws_07_0184.html