旁路导入相关问题

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.5
【问题描述】

请问咱们的OceanBase数据库的旁路导入方式是否都是锁表操作?包括load data和obloader里面的旁路导入操作

@论坛小助手

2 个赞

@论坛小助手

1 个赞

在 OceanBase 数据库的旁路导入过程中,无论是使用 LOAD DATA 语句还是 OBLOADER 工具,都会进行表锁操作。具体说明如下:

  1. LOAD DATA 语句

    • 根据文档描述,LOAD DATA 语句在执行时会主动提交之前的事务,同时在导入期间会加表锁,表无法被写入其他数据,整个过程中表是只读的。
    • 这意味着在旁路导入期间,表会被锁定,无法进行其他写操作。
  2. OBLOADER 工具

    • OBLOADER 工具在进行旁路导入时,也会进行表锁操作。这是因为旁路导入绕过了 SQL 层的接口,直接在 data 文件中分配空间并插入数据,为了保证数据的一致性和完整性,需要在导入期间锁定表。

综上所述,无论是使用 LOAD DATA 语句还是 OBLOADER 工具进行旁路导入,都会进行表锁操作。

具体信息可参考以下文档:

  1. 使用 SQL 命令进行数据迁移
  2. 全量旁路导入
  3. 使用 OBLOADER 旁路导入数据
5 个赞

目前锁表。下个大版本就会支持多个旁路任务进行同一个表导入了

3 个赞

旁路导入流程

  1. 创建一张hideen table(隐藏表),用于导入数据
  2. 给原表和 hidden table 加表锁
  3. 把原表的数据和新导入的数据合并后写入hidden table
  4. 在hidden table中重建原表的索引和外键
  5. 交换原表和hidden table的 table_id
    (中间任何异步出现错误,不交换table id就可以保证原子性,只有全部步骤成功,才会交换table_id)
  6. 解表锁
3 个赞

不锁表的话怎么保证一致性呢

2 个赞

如果只是单纯的load data方式导入数据,非旁路导入,那么是否就可以实现在多台observer节点同时导入数据到同一张表 @论坛小助手

1 个赞

对于普通的 LOAD DATA 方式(非旁路导入),OceanBase 数据库并不会像旁路导入那样存在严格的限制。普通 LOAD DATA 方式允许在不同的客户端同时向同一个表导入数据。然而,需要注意的是,每个导入操作仍然会获取表上的写锁,在并发场景下可能会导致锁定冲突,因此实际使用中可能需要进行适当的并发控制以确保数据的一致性和导入效率。

检索到的文档如下:

  1. 使用 SQL 命令进行数据迁移
1 个赞

666

1 个赞