暂无图片
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
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
observer 资源隔离
回答 1
这4个线程是指租户工作线程,主要用于处理SQL和事务提交。上下文切换是对的,但是不同的操作系统和cpu架构可能有所差异,并不简单的是1个cpu上下文切换4个ob线程
关于OB 数据和日志选择raid 磁盘的疑问
回答 1
如果使用磁盘raid卡使用writeback时,在非常高频读写时(低频时不会存在该问题),写到磁盘上的数据,立即读取数据,会发现读取的数据不是最新的数据,而是上一次老的数据,导致数据不正确.rootc
oceanbase ,opengauss 哪个认证认可度高点?
回答 1
OB吧
Docker挂载ob和.obd目录后,删除container后启动不起来
回答 1
除了挂载/root/ob和/root/.obd外,还要把/root/obagent挂载,然后rmrf/root/obagent/run/就能成功重启,100%成功。
关于内存使用 memstore的设置
回答 1
1)这是因为从底层解决了大事务能力的支持,事务不再受冻结操作影响,所以调整了这个参数的默认值;2)memstorelimitpercentage和rowcache应该是没关系的
OceanBase突然使用客户端登录不上
回答 1
先排查ob集群是否正常,直连observer节点2881端口看看,用户名用:root@sys。
OceanBase下某租户下的root账户的密码忘记了,除了通过ocp修改之外,在黑屏下怎么重置或修改?
回答 1
点击参考这篇文章:https://www.modb.pro/db/336262
OceanBase使用ON DUPLICATE KEY UPDATE的问题
回答 1
已采纳
看报错码是oracle租户类型,应该不支持onduplicate语法,可以试试mergeinto
Oceanbase中的分区表是物理上还是逻辑上的定义?
回答 1
物理上,類似於tidb裏的region
内存
回答 3
谢谢。你说的应该是纯开发方面经验,比较基础,OB开发和测试应该知道这些。我说的多是运维层面判断内存模块使用是否合理。感谢对OB的关注,可以加OB官方公众号进入OB微信群跟对OB感兴趣的网友(群里也有O