【发布时间】:2020-05-25 20:34:13
【问题描述】:
当我运行优化表****最终时,如何强制 ClickHouse 一次只合并一个分区(不指定分区 201304 和 201305 并按顺序运行)?
我正在使用 CollapsingMergeTree。它使用大量 RAM 对许多分区进行多次合并并杀死服务/机器。
【问题讨论】:
标签: clickhouse
当我运行优化表****最终时,如何强制 ClickHouse 一次只合并一个分区(不指定分区 201304 和 201305 并按顺序运行)?
我正在使用 CollapsingMergeTree。它使用大量 RAM 对许多分区进行多次合并并杀死服务/机器。
【问题讨论】:
标签: clickhouse
optimize final 的主要问题(表或分区无关紧要)即使分区只有 1 个部分,它也会完全重写/重新合并一个分区,这在 99.9999% 的情况下是多余的!!!!它重新合并了最终已经合并的旧数据!!!
之所以需要,是因为有时需要将通过单个插入插入的行(重复)折叠到具有永久单个部分的分区中。这是非常非常罕见的必需品。
所以我建议对包含多个部分的分区运行优化最终。你可以使用这样的东西
select concat('optimize table ',database, '.','\`', table, '\` partition ',partition , ' final;')
from system.parts
where active and (engine like '%ReplacingMergeTree' or engine like '%CollapsingMergeTree')
group by database,table,partition
having count()>1
PS:如果您使用 GraphiteMergeTree,那就另当别论了,还有更简单的解决方案。
【讨论】: