oceanbase 大数据量更新

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】3.2
【问题描述】全表900万左右,现在我要更新一个字段数据量大概800万。直接update太慢了,有什么办法可以优化?
update a set a.name=xxx
where name is null
语句类似上面这种
【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

并行和索引,企业版找对应的企业支持吧

  1. 表结构信息要发, 关键信息是主键的定义、表是否分区(分区策略等)。
  2. OB 4.2 后支持 并行 DML。 见: 并行 DML-OceanBase 数据库 -OceanBase文档中心-分布式数据库使用文档
  3. 如果不依赖 OB 的并行 DML 功能,那就自己做并发。比如说写存储过程(如果是 ORACLE 租户),写一个存储过程分批取出数据的主键,逐行更新,批量提交。每个存储过程处理不同范围的数据,多个存储过程并行。
  4. 如果是 MySQL租户,那就从这个表里单独拉出主键并分批标号,记录到单独的表。写JAVA程序按批号读取记录,拿到主键去更新表,批量提交。多个程序并发处理不同的批号的数据。
  5. ORACLE 数据库的并发处理经验依然适用于 OB。
  6. OB 大批量更新的时候保证租户内存充足,内存不足的时候关注转储效率。转储太多会导致更新变慢,MEMTABLE 内存触达限流值会导致更新速度急剧下降。 内存优化,一边执行一边观察。
    7.最好是保证内存足够,否则就别嫌弃 UPDATE 太慢。慢就不会出现内存消耗太快而报错。

如果像mysql一样支持LOADDATA local本地文件的话,可以做到,可惜oceanbase目前还不支持,期待尽快