sstable文件目录


如上图,多个租户已运行十余天,数据文件目录中只有一个 block_file 文件。

问题:

  1. mini sstable、 minor sstable、major sstable 文件在分别在哪个目录下,以何命名?
  2. 各个租户的文件是独立的,还是合并在一起?为啥图中只有一个block file文件?
  3. 能否提供一个环境截图示例

谢谢!

3 个赞

所有数据都在这里面。

3 个赞

呵呵

都在一个文件里?

原来如此

OB 社区AI 说每个租户一个独立文件。

能否提供官方文档作证此观点?谢谢

数据文件目录

store 是数据文件目录,包含了 clogslogsstable 这 3 个子目录。其中 clogslog 是事务日志目录,slog 存储静态数据写入的事务日志,clog 存储动态数据写入的事务日志。sstable 是基线数据目录。sstable 目录下会有一个 block_file,这个文件在 OBServer 节点启动后就会被创建,文件的大小由 datafile_sizedatafile_disk_percentage 控制。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003977247

自己也可以很容易测。看看自己的 环境的就知道了。

AI 回答如下:

OceanBase 中 Mini/Minor/Major SSTable 的存储位置、命名规则与租户隔离机制

1. SSTable 的存储路径

在 OceanBase 数据库中,所有类型的 SSTable(包括 Mini、Minor 和 Major SSTable)都不以独立文件形式存在,而是统一存储于 OBServer 节点的一个或多个名为 block_file 的大型数据文件中。

  • 默认路径/OBServer节点安装目录/store/sstable/
  • 文件名block_file

配置磁盘数据文件的动态扩容 → 背景信息

从 OceanBase V4.2.0 开始,支持数据文件的渐进式扩容,初始预分配较小空间,后续根据使用情况自动扩展,避免早期版本预分配导致的空间浪费。

2. SSTable 的命名规则

OceanBase 并没有为 Mini、Minor 或 Major SSTable 提供显式的文件级命名规则,因为这些 SSTable 实际上并不是独立的磁盘文件。

相反,SSTable 是作为 block_file 中的一组宏块集合存在的,系统通过内部元数据(如:起始宏块 ID、结束宏块 ID、版本号、租户 ID、表 ID、分区 ID、时间戳等)来标识每一个 SSTable 的属性及其类型(L0/L1/L2)。例如:

  • Mini SSTable (L0):MemTable 冻结后转储生成,对应一批新写入的增量数据。
  • Minor SSTable (L1):由多个 L0 的 Mini SSTable 合并而来,减少查询时需扫描的文件数。
  • Major SSTable (L2):全量基线数据,由每日合并(Daily Merge)或全局合并(Major Compaction)生成。

这种设计借鉴了 LSM-Tree 的典型分层结构(L0~L2),但物理上全部嵌入在 block_file 中。

转储管理概述 → SSTable 的分层策略
转储和合并概述 → Compaction 类型

3. 各租户的数据是否独立存放?

否,各租户的数据并不存放在独立的文件或目录中,而是共享同一个 block_file,但在逻辑上严格隔离。

  • 所有租户的数据共同写入同一组 block_file
  • 不同租户的数据通过 分区(Partition)+ 宏块偏移地址 + 元数据标记 来区分。
  • 资源隔离通过 资源单元(Unit) 实现,控制 CPU、内存、IO 等资源配额,确保互不影响。
  • 数据安全方面,禁止跨租户访问,保障数据隐私。

尽管物理上共用文件,但由于每个 SSTable 都携带完整的租户标识和分区信息,系统可在读取时精准定位目标数据。

多租户架构概述
租户间的资源隔离

4. 为何图中只有一个 block_file

这是 OceanBase 的核心设计之一:

  • OceanBase 使用单个大文件 block_file 作为底层数据容器,以保证磁盘 I/O 的连续性和高效性。
  • 文件大小由参数 datafile_sizedatafile_disk_percentage 控制,支持动态扩容。
  • 所有 SSTable(无论 Mini/Minor/Major)、索引、LOB 等数据均在此文件中按宏块(Macro Block, 2MB 固定大小)进行管理和分配。
  • 这种“大文件 + 内部块管理”模式类似于文件系统的 inode 管理机制,避免了大量小文件带来的文件系统性能瓶颈。

因此,“只有一个 block_file”是正常现象,也是推荐部署方式。

存储架构概述 → 存储结构

mini,mion,

也就说,物理上,mini sstable、 minor sstable、major sstable 文件 全在一个block_file中,可以把block_file 看作一个虚拟磁盘。

为了性能考虑,只有一个文件哈!