Clickhouse:我应该手动优化 MergeTree table 吗?

Clickhouse: Should i optimize MergeTree table manually?

我有一个 table 喜欢:

create table test (id String, timestamp DateTime, somestring String) ENGINE = MergeTree ORDER BY (id, timestamp)

我插入了 100 条记录,然后插入了另外 100 条记录,我 运行 select 查询 select * from test clickhouse returning 有 2 个部分,它们的长度是 100,并且它们是单独订购的。然后我 运行 查询 optimize table test 并且它开始 return 有 1 个部分并且它的长度是 200 并被排序。那么我应该 运行 在所有插入之后优化查询吗?它是否会像 select count(*) from test where id = 'foo' 那样提高 select 查询性能?

通常不会,你可以依赖Clickhouse后台合并。

此外,Clickhouse 无意将分区中的所有数据合并到一个部分文件中,因为“over-optimization”也会影响性能

合并是最终的,可能永远不会发生。这取决于之后发生的插入次数、分区中的部件数、部件的大小。如果输入部分的总大小大于最大部分大小,那么它们将永远不会被合并。

不断合并到一个部分是很不合理的。 合并没有这样的目标。相反,目标是拥有最少数量的零件和最少数量的合并。合并会消耗大量磁盘和处理器资源。

将两个 300GB 的部分合并为一个 600GB 的部分 3 小时是没有意义的。合并必须读取、解压 600GB、合并、压缩、写回,之后 selects 的性能将根本不会增长或增长微乎其微。