当写入速率过快时,ob内核是否能动态控制写入速率的功能,防止内存溢出。
1 个赞
在小规格租户或高并发写入场景(如批量导入、ETL 作业)中,内存中的 MemTable 可能迅速达到上限,触发冻结并等待转储(Compaction)。若磁盘转储速度跟不上写入速率,可能导致暂时无法接收新写请求。
缓解措施:
- 启用写入限速(
write_throttling
)- 扩大租户内存配额
- 调整 MemTable 占比和转储阈值
OceanBase 数据库确实具备写入过载保护功能,当资源有限,无法扩展内存时,可以通过服务端写入限速来保护内存,避免写入超限。这可以通过设置以下两个配置项来开启服务端的写入限速功能:
-
writing_throttling_trigger_percentage
:用于设置写入速度的阈值,即当 MemStore 已使用的内存达到该阈值(百分比)时,触发写入限速。该配置项的取值范围为 [1, 100],默认值为 60,取值为 100 表示关闭写入限速机制。 -
writing_throttling_maximum_duration
:指定触发写入限速后,剩余 MemStore 内存分配完所需的时间。默认值为 2h,该配置项一般不做修改。
在租户的管理员账号中,设置内存写入达到 80% 开始限速,并保证剩余内存足够提供 2h 的写入限速,示例如下:
obclient> ALTER SYSTEM SET writing_throttling_trigger_percentage = 80;
Query OK, 0 rows affected
obclient> ALTER SYSTEM SET writing_throttling_maximum_duration = '2h';
Query OK, 0 rows affected
具体信息可参考以下文档:
都是自动的吧,不用人工来干预吧。