由于很多数据存储于 SSTable,为了加速查询,我们需要对数据进行缓存。OceanBase 数据库并不需要对缓存的大小进行设置,类似于 Linux 对于 page cache 的控制策略,OceanBase 数据库会尽量使用租户的内存,直到租户的内存达到一定阈值后,才会触发对 Cache 的淘汰。同时 OceanBase 数据库也是一个多租户系统,对于每一个租户都会有各自的 Cache,但 OceanBase 数据库会对所有租户的缓存进行统一管理。
OceanBase 数据库有许多种不同类型的 cache,具体类型如下:
Block Cache
类似于 Oracle 的 Buffer Cache,缓存具体的数据块,实际上 Block Cache 中缓存是解压后的微块,大小是变长的。
Block Index Cache
缓存微块的索引,类似于 BTree 的中间层,在数据结构上和 Block Cache 有一些区别,由于中间层通常不大,Block Index Cache 的命中率通常都比较高。
BloomFilter Cache
BloomFilter 是一种结构,可以帮助加速对空查询的过滤,有助于提升 insert 的性能。OceanBase 数据库的 BloomFilter 是构建在宏块上的,按需自动构建,当一个宏块上的空查次数超过某个阈值时,就会自动构建 BloomFilter,并将 BloomFilter 放入 Cache。
Row Cache
Row Cache 缓存具体的数据行,在进行 Get/MultiGet 查询时,可能会将对应查到的数据行放入 Row Cache,这样在进行热点行的查询时,就可以极大地提升查询性能。
Partition Location Cache
Partition Location Cache 用于缓存 Partition 的位置信息,来帮助对一个查询进行路由。
Schema Cache
Schema Cache 缓存数据表的元信息,用于执行计划的生成以及后续的查询。
Clog Cache
Clog Cache 缓存 clog 数据,用于加速某些情况下 Paxos 日志的拉取。