OceanBase Oracle 模式下 MERGE INTO 执行时间较长,有什么优化建议?

大家好,最近在使用 OceanBase Oracle 模式做数据同步时遇到一个问题。

目前有两张表需要关联更新,数据量大概几百万到上千万。现在使用 MERGE INTO 根据 dbid + username 更新目标表:

MERGE INTO privilege_audit p
USING (
    SELECT 
        dbid,
        username,
        MAX(systemid) AS systemid
    FROM db_connection_log
    GROUP BY dbid, username
) t
ON (
    p.dbid = t.dbid
    AND p.username = t.username
)
WHEN MATCHED THEN
    UPDATE SET p.systemid = t.systemid;

单独执行查询感觉还可以,但是实际执行 MERGE 时耗时比较长,有时候还会遇到 SQL 超时。

目前目标表 (dbid, username) 已经建立索引。

想请教一下:

  1. OceanBase Oracle 模式下,MERGE INTO 大数据量更新有没有比较推荐的优化方式?
  2. USING 子查询中的 GROUP BY 是否可能成为主要性能瓶颈?
  3. 是否建议提前将 USING 查询结果落到临时表,再进行 MERGE?
  4. 有没有必要通过 EXPLAIN / EXPLAIN EXTENDED 查看具体执行计划?

OceanBase 版本是 4.x,Oracle 模式。

如果有类似场景的优化经验,麻烦大家指点一下,谢谢。

@论坛小助手

您好,您提的这个技术问题可能牵涉到 OceanBase 企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署 OceanBase 企业版销售合同,请你联系客户经理;

  2. 如你所在的企业客户尚未签署 OceanBase 企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。

我最近遇到过,也是merge into,然后加了并行,/*+ ENABLE_PARALLEL_DML PARALLEL(4) */ 并行4效率提升4倍