[TOC] # 缓存机制 由于很多数据存储于 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 日志的拉取。