#7403·citus

在复制分片时使用 TRUNCATE + COPY FREEZE

作者: JelteF创建于 2024年1月5日更新于 2026年9月2日
标签performancegood first issue

src/backend/distributed/operations/worker_shard_copy.c 文件中包含了我们用于分片移动和分片拆分的主要复制逻辑。在与 @DimCitus 交谈后,我意识到我们可以使用 COPYFREEZE 选项来减少复制完成后需要进行大量真空的情况。要利用 freeze 选项,需要在复制的同一事务中截断目标表。对于我们目前的所有用例来说,这是完全可行的,因为新创建的目标分片目前为空。我认为需要做到这一点的事情有:

  1. ConstructShardCopyStatement 中为生成的 COPY 命令添加 FREEZE 选项
  2. LocalCopyToShard 中为创建的选项列表添加 FREEZE 选项
  3. ConnectToRemoteAndStartCopy 中启动事务
  4. ConnectToRemoteAndStartCopy 中截断表(在开始复制之前)
  5. ShardCopyDestReceiverShutdown 中结束事务

内容来源: citusdata/citus