旁路导入是直接生成sstable?还是要写memtable?

旁路导入数据,请问是直接写sstable吗?是哪层的sstable哪?还是说要写memtable。

OceanBase 数据库支持旁路导入的方式向数据库插入数据,即 OceanBase 数据库支持向 data 文件中直接写入数据的功能。旁路导入可以绕过 SQL 层的接口,直接在 data 文件中直接分配空间并插入数据,从而提高数据导入的效率

注意事项

旁路导入会把所有的已有的数据都写一遍。如果原表的数据比较大,导入的数据比较少,可能不适合使用旁路导入。

这个意思是直接修改基线SSTABLE?

先直接写到临时文件,再合到基线SSTABLE

是晚上合并的时候再合并到一起吗?

不是,直接做的

这是不是就是导致我做完旁路导入数据后,再用基线版本查询返回结果为空的原因吧。是不是我踩到bug了

你这边是怎么查询的呢?可以把流程说一下吗?

–旁路导入前,基线版本数据为10000条。(刚刚做完合并)
MySQL [oceanbase]> select /+frozen_version(1684728639374477549)/count() from tpcc.t;
±---------+
| count(
) |
±---------+
| 10000 |
±---------+
1 row in set (0.004 sec)

–旁路导入,插入3条数据
MySQL [tpcc]> insert /+append enable_parallel_dml parallel(2)/into t select * from t1;
Query OK, 3 rows affected (3.494 sec)
Records: 3 Duplicates: 0 Warnings: 0

–当前结果10003条,符合预期
MySQL [tpcc]> select count() from t;
±---------+
| count(
) |
±---------+
| 10003 |
±---------+
1 row in set (0.008 sec)

–旁路导入后,基线版本数据查询,竟然返回0条数据
MySQL [tpcc]> select /+frozen_version(1684728639374477549)/count() from tpcc.t;
±---------+
| count(
) |
±---------+
| 0 |
±---------+
1 row in set (0.002 sec)

GV$OB_COMPACTION_PROGRESS;
查一下这张表是不是在这之后又有合并记录?

这个视图没有新增记录,还是凌晨2点合并的。
我查了其他表(没有旁路导入的表),通过基线查询结果就是对的。只要做完insert /*+append…这个表的基线查询就会变成0.当前数据是准确的。

select * from __all_virtual_table_mgr where tablet_id =xxxx;
旁路导入完以后,看下这个基线版本是不是变化了,你对应的frozen_version可能是需要变得

这个现象是正常的,因为做了旁路导入,实际上底层是另外开一张表来写,导入完之后替换了原来的表,所以实际上多版本数据确实查不到了