如上图,多个租户已运行十余天,数据文件目录中只有一个 block_file 文件。
问题:
- mini sstable、 minor sstable、major sstable 文件在分别在哪个目录下,以何命名?
 - 各个租户的文件是独立的,还是合并在一起?为啥图中只有一个block file文件?
 - 能否提供一个环境截图示例
 
谢谢!
如上图,多个租户已运行十余天,数据文件目录中只有一个 block_file 文件。
问题:
谢谢!
所有数据都在这里面。
呵呵
都在一个文件里?
原来如此
OB 社区AI 说每个租户一个独立文件。
能否提供官方文档作证此观点?谢谢
store 是数据文件目录,包含了 clog、slog、sstable 这 3 个子目录。其中 clog、slog 是事务日志目录,slog 存储静态数据写入的事务日志,clog 存储动态数据写入的事务日志。sstable 是基线数据目录。sstable 目录下会有一个 block_file,这个文件在 OBServer 节点启动后就会被创建,文件的大小由 datafile_size 或 datafile_disk_percentage 控制。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003977247
自己也可以很容易测。看看自己的 环境的就知道了。
AI 回答如下:
在 OceanBase 数据库中,所有类型的 SSTable(包括 Mini、Minor 和 Major SSTable)都不以独立文件形式存在,而是统一存储于 OBServer 节点的一个或多个名为 block_file 的大型数据文件中。
/OBServer节点安装目录/store/sstable/
block_file
从 OceanBase V4.2.0 开始,支持数据文件的渐进式扩容,初始预分配较小空间,后续根据使用情况自动扩展,避免早期版本预分配导致的空间浪费。
OceanBase 并没有为 Mini、Minor 或 Major SSTable 提供显式的文件级命名规则,因为这些 SSTable 实际上并不是独立的磁盘文件。
相反,SSTable 是作为 block_file 中的一组宏块集合存在的,系统通过内部元数据(如:起始宏块 ID、结束宏块 ID、版本号、租户 ID、表 ID、分区 ID、时间戳等)来标识每一个 SSTable 的属性及其类型(L0/L1/L2)。例如:
这种设计借鉴了 LSM-Tree 的典型分层结构(L0~L2),但物理上全部嵌入在 block_file 中。
否,各租户的数据并不存放在独立的文件或目录中,而是共享同一个 block_file,但在逻辑上严格隔离。
block_file。尽管物理上共用文件,但由于每个 SSTable 都携带完整的租户标识和分区信息,系统可在读取时精准定位目标数据。
block_file?这是 OceanBase 的核心设计之一:
block_file 作为底层数据容器,以保证磁盘 I/O 的连续性和高效性。datafile_size 或 datafile_disk_percentage 控制,支持动态扩容。因此,“只有一个 block_file”是正常现象,也是推荐部署方式。
mini,mion,
也就说,物理上,mini sstable、 minor sstable、major sstable 文件 全在一个block_file中,可以把block_file 看作一个虚拟磁盘。
为了性能考虑,只有一个文件哈!