我想尝试了解OPTIMIZE查询在克里克豪斯中的性能。
我计划使用它从MergeTree中删除大容量插入后的重复项,因此我有以下选项:
OPTIMIZE TABLE db.table DEDUPLICATE
或
OPTIMIZE TABLE db.table FINAL DEDUPLICATE
据我所知,第一种状态只会在尚未合并的情况下重复插入,而第二种状态将对整个表进行重复。但是,我关心性能;从对不同大小表的OPTIMIZE TABLE db.table FINAL DEDUPLICATE的脏分析中,我可以看到随着表的变大(0.1s,0.10万行,1s,0.3M行,12s,10M行),它会变得更糟。但是,我假设OPTIMIZE TABLE db.table DEDUPLICATE是基于插入大小和表大小的,那么应该更具有性能吗?
有人能指出一些关于这些表演的文献吗?
此外,如果我用ReplacingMergeTree替换表,这些问题会消失吗?我想同样的过程会发生在引擎盖下,所以不管是哪种方式都不重要。
发布于 2021-08-23 04:40:23
你确定:
召唤,召唤
OPTIMIZE TABLE db.table FINAL DEDUPLICATE定期地考虑限制受影响的行(参见分区param)或列(请参见列param)的范围肯定是一种糟糕的方法(它优化了整个表)。
我会考虑使用仅限替换merging引擎,该引擎旨在在“本机”合并过程中减少行数(对于优化情况而言,不是手动的)。
请参阅其他信息:
https://dba.stackexchange.com/questions/298253
复制相似问题