暂无图片
oceanbase 大数据量更新
我来答
分享
暂无图片 匿名用户
oceanbase 大数据量更新

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

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
O
OceanBase社区传送门

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

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏