OceanBase 多租户环境下,某个租户内存写满时的处理机制,以下描述正确的是?
A. 当租户 MemStore 使用率达到 freeze_trigger_percentage (默认 70%)时,系统会触发该租户的主动转储(Minor Compaction),如果转储速度跟不上写入速度,最终写入会被限流(Writing Throttling),报错返回客户端。
B. 租户内存写满时,系统会优先借用同一 OBServer 上其他空闲租户的内存资源,若整体节点内存仍不足,则触发节点级别的全局合并。
C. OceanBase 采用“强隔离”内存管理,租户内存写满后,后续写入操作会直接返回 -4184 (内存不足)错误,由应用负责重试。
D. 租户内存写满触发转储时,转储操作会阻塞该租户的所有写入操作,直到转储完成释放部分 MemStore 内存后才恢复写入。
解析 :
OceanBase 的租户内存管理采用“软限+硬限”结合的方式。当租户 MemStore 使用率达到 freeze_trigger_percentage 时,会主动触发冻结和转储。如果写入速度持续超过转储速度,内存使用率继续上升达到 writing_throttling_trigger_percentage (默认 80%)时,系统会对该租户的写入操作进行限流(延迟写入请求),甚至最终达到租户内存上限(硬限)时返回错误。这是一个平滑的背压机制,而不是瞬时直接报错。
-
A 正确 :描述了完整的背压流程:冻结转储 → 限流 → 报错。
-
B 错误 :OceanBase 是强隔离 的,租户之间内存资源严格隔离,不会借用其他租户的内存。节点级别内存不足时也不会触发全局合并(合并是租户级别的操作)。
-
C 错误 :并非直接返回错误,而是通过限流(背压)给予转储一定的缓冲时间,只有严重超限且持续写入时才返回错误。
-
D 错误 :转储(及冻结)不阻塞写入 。冻结只是切换活跃 MemTable,新写入进入新的活跃 MemTable,冻结的 MemTable 后台转储,两者并行。写入操作不会等待转储完成。