由于很多数据存储于 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 日志的拉取。