看到每个observer上的data-dir/sstable目录下只有一个block_file文件,问题如下:
1、 observer上的所有租户的数据都是写入到一个block_file里吗?(这里感觉有点类似oracle的segment管理)
2、新版本中clog是按租户做了不同目录划分,为什么block_file还是采用1个? 一个超大文件不会带来管理和性能问题吗?
3、如何看block_file里 不同租户、表 的sstable布局?
4、如果获取macro id 和micro id。dumpsst命令输出没有结果,只记录了2个日志文件?
1.是的
2.最终都是通过宏块/微块组织的,一个block_file你可以理解为一个盘,底层存储自己来管理使用这块盘,多个文件并没带来什么收益
3.先找到表的分区tablet_id(CDB_OB_TABLE_LOCATIONS),然后查__all_virtual_tablet_sstable_macro_info过滤tablet_id,会列出所有的宏块。可以通过表中的宏块的macro_logic_version和GV$OB_SSTABLES中sstable的end_log_Scn来对应宏块和sstable的关系。
4.知道宏块id后,可以使用dumpsst来dump出宏块信息,里面会包含微块信息。你这里-f应该是跟store目录(/data/oceanbase/data/sstable)
在请问下 都在一个block_file里 每次compact后不同的租户、表数据间的空洞或者碎片怎么重新利用或者尽量避免碎片化严重
你说的空洞是指什么,微块内的空洞?
不知道理解的对不对 ,比如说 2个租户 ,一个租户占用的宏块范围是1-100 另一个是101-200 ,compact后 租户1宏块范围缩减到1-50 那51-100这之间的空间怎么处理? 租户占用的空间逻辑组织上应该是连续的吧,如果复用的这种释放出来的空间都比较小 而且数量比较多的话 会不会影响一些扫描性能
不是连续的。所有租户用一套宏块管理机制,比如宏块1是租户1的,宏块2可以是租户2的,也可以是租户1的,保证每个宏块属于一个租户就可以。只要租户需要宏块那么就尝试分配一个宏块出来