Clickhouse

Clickhouse 優化重複數據刪除的性能

  • August 23, 2021

我想嘗試了解ClickhouseOPTIMIZE中查詢的性能。

我計劃在從 a 批量插入後立即使用它來刪除重複項MergeTree,因此我可以選擇:

OPTIMIZE TABLE db.table DEDUPLICATE

或者

OPTIMIZE TABLE db.table FINAL DEDUPLICATE

我知道第一個狀態僅在插入尚未合併的情況下對插入進行重複數據刪除,而第二個狀態將對整個表執行重複數據刪除。但是我擔心性能;從OPTIMIZE TABLE db.table FINAL DEDUPLICATE對不同大小表的髒分析中,我可以看到隨著表變大(0.1M 行為 0.1s,0.3M 行為 1s,10M 行為 12s),它會呈指數級惡化。我假設OPTIMIZE TABLE db.table DEDUPLICATE是基於插入大小和表大小,所以應該更具性能嗎?

誰能指出一些關於這些表演的文獻?

此外,如果我用 替換錶,這些問題會消失ReplacingMergeTree嗎?我想同樣的過程會在幕後發生,所以不管怎樣都無所謂。

你確定:

  • 無法更改攝取管道以避免/減少重複?
  • 重複很關鍵?它們會影響度量計算還是消耗更多的磁碟儲存空間?

呼喚

OPTIMIZE TABLE db.table FINAL DEDUPLICATE

定期絕對是一個壞方法(它優化了整個表) - 考慮限制受影響的行(參見PARTITION參數)或列(參見COLUMNS參數)的範圍。

我會考慮使用

$$ only $$ ReplacingMergeTree - 設計用於在“本機”合併期間對行進行重複數據刪除的引擎(對於 OPTIMIZE 的情況不是手動的)。 查看附加資訊:

引用自:https://dba.stackexchange.com/questions/298253