為了降低資料存放區成本、提高查詢效能和系統資源使用率。雲資料庫ClickHouse提供了冷熱資料階層式存放區的功能。您可以根據查詢頻率將資料存放區在不同類型的磁碟中。本文介紹如何開啟冷熱資料階層式存放區功能和設定階層式存放區策略。
前提條件
雲資料庫ClickHouse叢集版本為20.8及以上版本。
對於不支援的低版本,可以先將資料移轉至20.8及以上版本的叢集,再進行冷熱資料階層式存放區。具體請參見雲資料庫ClickHouse叢集間的資料移轉。
雲資料庫ClickHouse企業版基於緩衝及共用儲存,自動進行冷熱分層。不依賴冷熱資料存放區規則。
背景知識
熱資料:訪問頻次較高的資料,儲存在熱資料盤(即建立叢集時所選的ESSD雲端硬碟或高效雲端硬碟)中,滿足高效能訪問的需求。
冷資料:訪問頻次較低的資料,儲存在較低價的冷資料盤中,滿足高性價比的儲存需求。
冷熱資料階層式存放區提供了兩種儲存策略,具體如下:
儲存策略
詳情
預設儲存策略
將新寫入的資料存放區在熱資料盤中,提供高效查詢。當熱資料存放區量達到業務使用閾值時,自動將當前熱資料盤中佔用空間最大的part資料檔案移動到冷資料盤儲存,從而釋放熱資料盤儲存空間。
TTL儲存策略
在預設儲存策略基礎上,添加TTL語句,實現將間隔時間之前的所有資料自動轉移到冷資料盤中。
注意事項
已開通資料備份功能的雲資料庫ClickHouse叢集不再支援開通冷熱階層式存放區功能。
開通冷熱資料階層式存放區功能,請在業務低峰期進行。開通該功能後叢集會立即進行重啟,重啟期間只能查看叢集資訊,無法進行升配、擴容、縮容、修改參數配置等操作。
使用冷熱資料階層式存放區功能時,需要給表指定儲存策略。
建表時,通過
SETTINGS storage_policy = 'hot_to_cold'
指定儲存策略。修改存量表的儲存策略。
2024年1月1日之後開通冷熱儲存策略的叢集
執行以下語句進行策略修改。
ALTER TABLE <table_name> MODIFY SETTING storage_policy = 'hot_to_cold';
參數說明:
參數
說明
table_name
表名。
2024年1月1日之前開通冷熱儲存策略的叢集
通過管控營運操作,新增冷熱儲存策略,讓您能夠使用新策略將熱盤資料移轉到冷盤。
冷熱資料階層式存放區功能開通後,暫不支援關閉。
計費說明
計費規則如下。
儲存類型
計費詳情
熱資料存放區
購買叢集後已經擁有了熱資料存放區空間,與購買叢集的儲存空間相同。
冷資料存放區
採用隨用隨付模式。無需提前購買固定的儲存空間,先使用,後付費,並按照實際使用的儲存空間每小時計費一次。
冷資料存放區的詳細單價,請參見社區相容版儲存空間費用。
計費公式:冷儲存空間費用=冷資料存放區單價×冷資料存放區使用量×使用時間長度。
樣本:若冷資料存放區單價為0.000026美元/GB/小時,19:00-20:00使用冷資料存放區2000 GB,則總費用為:0.000026美元/GB/小時×2000 GB×1小時=0.052美元。20:00-21:00釋放了500 GB冷資料存放區空間,實際使用了1500 GB儲存空間,那麼20:00-21:00的總費用為:0.000026美元/GB/小時×1500 GB×1小時=0.039美元。
本樣本中的價格僅用於舉例,實際價格以控制台為準。
開通冷熱階層式存放區
在頁面左上方,選擇叢集所在的地區。
在叢集列表頁面,選擇社區版執行個體列表,單擊目的地組群ID。
單擊左側導覽列的冷熱階層式存放區。
單擊開通冷熱階層式存放區。
在彈出的冷熱資料分層開啟提示視窗,單擊確定。
確定開通後,叢集會進行重啟。待叢集狀態從配置變更中變為運行中,即完成開通。
冷熱分層預設儲存策略
冷熱階層式存放區功能開通後,預設儲存策略的相關參數如下表所示。
參數 | 說明 |
move_factor | 當熱資料盤中的可用儲存空間所佔比例小於該參數時,自動將當前熱資料盤中佔用空間最大的part資料檔案移動到冷資料盤儲存。 取值範圍為 說明 如何查看磁碟空間,請參見查看磁碟空間。 |
prefer_not_to_merge | 冷資料盤中的資料是否進行合并。取值範圍如下。
|
新增TTL階層式存放區策略
在預設儲存策略的基礎上,添加TTL語句,實現將間隔時間之前的所有資料自動轉移到冷資料盤中。
您可以參考如下文法添加TTL語句。
TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk'
樣本
以date列為依據,將90天之前的所有資料移動到冷資料盤。建表語句如下。
CREATE TABLE ttl_test_tbl
(
`f1` String,
`f2` String,
`f3` Int64,
`f4` Float64,
`date` Date
)
ENGINE = MergeTree()
PARTITION BY date
ORDER BY f1
TTL date + INTERVAL 90 DAY TO DISK 'cold_disk'
SETTINGS storage_policy = 'hot_to_cold';
更改TTL階層式存放區策略
您可以更改TTL階層式存放區策略的日期或日期時間類型的列以及間隔時間。
預設情況下,更改TTL階層式存放區策略後存量資料和新增資料全部按照新策略進行儲存。
如果您不想更改存量資料的TTL階層式存放區策略,可以在更改TTL階層式存放區策略之前,執行
set materialize_ttl_after_modify=0;
語句。執行成功後,再更改TTL階層式存放區策略。存量資料按照原有策略進行儲存,不發生改變。只有新增資料按照新策略進行儲存。更改TTL階層式存放區策略後,已經進入冷資料盤中的資料不會自動移動到熱資料盤。如果需要移動,請參見移動冷熱資料盤的資料。
您可以參考如下文法更改TTL階層式存放區策略。
ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk';
參數說明如下。
參數 | 說明 |
table_name | 表名。 |
time_column | 更改後的日期或日期時間類型的列。 |
number | 更改後的間隔時間。 常用單位有:Day、Week、Month、Year。 |
移動冷熱資料盤的資料
移動熱資料盤資料到冷資料盤。
ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'cold_disk';
移動冷資料盤資料到熱資料盤。
ALTER TABLE <table_name> ON CLUSTER default MOVE PARTITION <partition> TO DISK 'default';
說明partition
為分區名稱,您可以在system.parts系統資料表中查看。
查看冷熱資料盤上的資料
查看熱資料盤上的資料。
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='default' AND active = 1;
查看冷資料盤上的資料。
SELECT * FROM system.parts WHERE database = '<db_name>' AND TABLE = '<tbl_name>' AND disk_name ='cold_disk' AND active = 1;
查看磁碟空間
開通冷熱資料階層式存放區功能後,您可以執行如下語句查看磁碟空間。
SELECT * FROM system.disks;
返回結果如下。
┌─name─────┬─────────path───────────────────────────┬─free_space───────────┬─total_space ─────────┬─used_space───┬─keep_free_space───┬──type──┐
│ cold_disk│ /clickhouse/data/data/disks/cold_disk/ │ 18446744073709551615 │ 18446744073709551615 │ 115312080698 │ 0 │ OSS │
│ default │ /clickhouse/data/data/ │ 201663209472 │ 207083249664 │ 5420040192 │ 0 │ local │
└──────────┴────────────────────────────────────────┴──────────────────────┴──────────────────────┴──────────────┴───────────────────┴────────┘
結果集列名說明如下。
參數 | 說明 |
name | 磁碟名稱。取值如下。
|
path | 磁碟上的資料存放區路徑。 |
free_space | 當前磁碟剩餘可用空間。冷資料盤可用空間不受限制。單位:Byte。 |
total_space | 當前磁碟總空間。冷資料盤可用空間不受限制。單位:Byte。 |
used_space | 當前磁碟已經被使用的空間。單位:Byte。 |
keep_free_space | 預留的空閑空間。單位:Byte。 |
type | 儲存介質。取值如下。
|