4.2版本OB update部分小表非常慢

【 使用环境 】生产环境
【 OB or 其他组件 】 OBServer
【 使用版本 】oceanbase-ce-4.2.1.0-100000102023092807
【问题描述】有一些表,表的数据库都很小,最小的只有不到4000条数据,执行全表更新的时间很慢,其中不到4000条数据的表更新需要5分钟。

已知信息:
1.如果带了where条件更新少量数据是正常的。
2.排除了锁、oblb、obsproxy的影响,单独在任意一台observer执行也会很慢。
3.每日合并正常
4.truncate表后再插入进去,更新依然很慢
5.create table like,insert into的方式创建结构相同的表和数据,更新正常。
6.现象在其他环境不能复现,暂时只发现固定几张表有这个问题。其他表存不存在暂不清楚。
7.这类表更新的不频繁,一天更新一次。
【复现路径】无法本地复现,在生产环境中有些小表慢,有些不慢,且是固定的表慢
【附件及日志】根据执行的SQL采集了trace日志
trace.log (669.4 KB)

这是目前内核一个需要优化的热点路径,修复已经在4.2.1bp2及其后的版本上修复,具体链接见https://github.com/oceanbase/oceanbase/commit/ac0d44e9ca9d64ceb7aa5319137d49789b0b134c

这里也简单描述下update lob慢的主要原因:
对于包含lob类型相关字段比如tex,blob等大对象字段, 在主表中只会记录lob tablet id,对应直接的数据表lob tablet上的数据行,查找lob tablet耗时很高,高的原因是这个过程涉及到磁盘读IO,不是一个纯内存的操作,避免读磁盘,做了aux_tablet_info_cache,并且通常情况下,这个cache是合法的,可以避免慢速磁盘IO的,但是存储层转储合并会导致cache失效并进行磁盘IO,目前这个问题已经修复,见上面修复链接。