Clickhouse:我应该手动优化MergeTree表吗



我有一个类似于的表

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

我插入了100条记录,然后插入了另外100条记录并运行select查询select * from test点击室返回两个部分,它们的长度为100,并且它们是自己订购的。然后我运行查询optimize table test,它开始返回1个部分,长度为200,并排序。那么,我应该在所有插入之后运行优化查询吗?它是否像select count(*) from test where id = 'foo'一样提高了选择查询的性能?

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

总是把一部分合并在一起是非常不合理的。合并并没有这样的目标。相反,目标是在最小数量的合并中拥有最小数量的零件。合并会消耗大量的磁盘和处理器资源。

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

通常情况下,您可以依赖Clickhouse后台合并。

此外,Clickhouse无意将分区中的所有数据合并到一个部分文件中,因为";过度优化";也会影响性能

最新更新