本文讲述 OceanBase 数据库的 SSTable Cache 淘汰、清空的逻辑总结。
OceanBase 数据库的 SSTable Cache 最有代表性的为 Row Cache 和 Block Cache 两类。
当数据不在 MemTable 中时,它们可以加速对磁盘的访问;当他们失效时会对性能造成一定的影响,所以需要了解它们在什么时候会被淘汰、清空。以下为一些总结。
- 宕机重启,会清空 Cache。
- 切主,会清空 Cache。
- 转储,会导致刚刚转储的 MemTable 没有 Cache。
- 正常的内存淘汰,Cache 内存是以 2MB 为单位整体淘汰的。OceanBase 数据库会根据每个 2MB 内存块上各个元素的访问热度为其计算一个分值,访问越频繁的内存块分值越高,同时有一个后台线程来定期对所有2M内存块的分值做排序,淘汰掉分值较低的内存块。
- 内存挤占,当内存满的时候会触发挤占。挤占是找到第一个没有正在使用的块淘汰,如果所有内存块都在使用则报错。没有正在使用的界定规则是内存引用计数为 0,所以热点块很难被挤占。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。