在复制分片时使用 TRUNCATE + COPY FREEZE
作者: JelteF创建于 2024年1月5日更新于 2026年9月2日
标签performancegood first issue
在 src/backend/distributed/operations/worker_shard_copy.c 文件中包含了我们用于分片移动和分片拆分的主要复制逻辑。在与 @DimCitus 交谈后,我意识到我们可以使用 COPY 的 FREEZE 选项来减少复制完成后需要进行大量真空的情况。要利用 freeze 选项,需要在复制的同一事务中截断目标表。对于我们目前的所有用例来说,这是完全可行的,因为新创建的目标分片目前为空。我认为需要做到这一点的事情有:
- 在
ConstructShardCopyStatement中为生成的 COPY 命令添加FREEZE选项 - 在
LocalCopyToShard中为创建的选项列表添加FREEZE选项 - 在
ConnectToRemoteAndStartCopy中启动事务 - 在
ConnectToRemoteAndStartCopy中截断表(在开始复制之前) - 在
ShardCopyDestReceiverShutdown中结束事务
内容来源: citusdata/citus