OceanBase 数据库中的合并和转储的过程中,如果突然将 MemStore 的内容丢弃,容易导致磁盘上“冷”的 SSTable(缓存没有充分加载)在突然收到大量请求后出现 Partition 性能抖动,因此需要对新生成的 SSTable 进行“预热”。本文主要介绍 OBServer 在一些 HA 和切流场景下 ,各种缓存的预热功能。
适用版本
OceanBase 数据库 V2.X 版本
合并场景
对于合并场景,OceanBase 数据库借助轮转合并过程进行预热。轮转合并过程中主机会将本地 SSTable 上的读请求进行记录,并按照时间控制比例渐进的通过 RPC 发送给备机,由备机在本地 SSTable 上模拟执行。预热的结果体现在相关的 KVcache 中。
配置项
merger_warm_up_duration_time
控制基线数据预热时间,默认为 0s,表示不开启预热。
有关该配置项的详细信息,请参见《OceanBase 数据库 参考指南》中的系统配置项章节。
转储场景
对于转储场景,OceanBase 数据库通过旧 MemTable 的延迟释放实现预热。在旧 MemTable 延迟释放的时间内,将旧 MemTable 上读请求逐步的转移到转储新生成的 SSTable 上。预热的结果体现在相关的 KVcache 中。
配置项
minor_warm_up_duration_time
控制新转储文件的预热时间,默认30 秒。
有关该配置项的详细信息,请参见《OceanBase 数据库 参考指南》中的系统配置项章节。
OBProxy 的预热
通过 OBProxy 第一次访问表时,OBProxy 会从 OBServer 获取本地位置缓存(Location Cache),包括 sys 租户、普通租户与用户表的位置缓存。
位置缓存用于指示集群、租户、表、分区所在的服务器的 IP 地址,通过位置缓存,可以避免大量访问 RootService 从而导致性能问题。