数据重分布使用说明
1. 数据重分布使用场景
当用户对数据分布有明确要求时(例如需要使用 Co-locate Join),但由于集群扩缩容、分片键调整等原因,导致当前数据分布与集群拓扑或目标分片规则不一致,此时可通过数据重分布(Reshard)功能重新调整数据分布,使其符合新的集群拓扑或分片规则。
说明:数据重分布(Reshard)为百度自研能力,社区版 ClickHouse 暂不支持该功能。请使用百度云 ClickHouse v26.2.7 及以上版本。
2. 使用方式
2.1 对表执行 Reshard 操作
1ALTER TABLE db.table RESHARD USING shard_key
2.2 暂停 Reshard 任务
1ALTER TABLE db.table PAUSE RESHARD
2.3 恢复已暂停的 Reshard 任务
1ALTER TABLE db.table RESUME RESHARD
2.4 取消 Reshard 任务
1ALTER TABLE db.table CANCEL RESHARD
3. 查看任务状态
3.1 查看运行中的 Reshard 任务
可通过 system.reshard_tasks 系统表查看任务状态:
1SELECT * FROM system.reshard_tasks WHERE task_id='xxx-xx-xxxx'
3.2 查看分片迁移状态
可通过 system.reshard_parts 系统表查看当前数据分片迁移进度:
1SELECT * FROM system.reshard_parts WHERE task_id='xxx-xx-xxxx'
3.3 查看已结束任务的历史记录
对于已结束的任务,可通过 system.reshard_tasks_history_log 系统表查看历史信息:
1SELECT * FROM system.reshard_tasks_history_log WHERE task_id='xxx-xx-xxxx'
4. 注意事项
数据重分布以 Part 为粒度进行拆分和迁移。在执行 Split 操作时,需要将整个 Part 加载到内存中完成切分。
如果任务执行过程中出现"Failed to split part xxxx: Split of part xxxx exceeds reshard_split_memory_limit (4295864617 > 4294967296)" 的报错信息,表示当前待拆分的单个 Part 所需内存已超过 reshard_split_memory_limit 参数限制。此时需要适当调大 reshard_split_memory_limit 参数(在 users.xml 文件的 <profiles>/<default> 配置项中设置)。
如果存在超大 Part(例如单个 Part 达到数百 GB),且其大小超过节点可用内存,则 Reshard 任务可能长期停留在该 Part 的 Split 阶段,导致任务无法继续完成。建议提前对超大 Part 进行治理后再执行 Reshard 操作。
评价此篇文章
