為了降低資料存放區成本、提高查詢效能和系統資源使用率,雲資料庫ClickHouse社區相容版和企業版的ESSD_L1、ESSD_L2儲存類型支援開啟冷熱資料階層式存放區的功能,支援您根據資料的訪問頻率將冷熱資料分別儲存在不同類型的儲存介質中。本文介紹如何開啟冷熱資料階層式存放區功能和設定階層式存放區策略。
前提條件
社區相容版
版本為20.8及以上版本。
叢集未開通資料備份功能。
對於不支援的低版本,可以先將資料移轉至20.8及以上版本的叢集,再進行冷熱資料階層式存放區。具體請參見雲資料庫ClickHouse社區相容版叢集間的資料移轉。
企業版
叢集儲存類型為ESSD_L1或ESSD_L2。如需使用該儲存類型,請提交工單聯絡支援人員開通白名單。
背景知識
冷熱資料階層式存放區將資料按訪問頻率分為兩類:
熱資料:訪問頻次較高的資料,儲存在熱資料盤(即建立叢集時所選的ESSD雲端硬碟或高效雲端硬碟)中,滿足高效能訪問的需求。
冷資料:訪問頻次較低的資料,儲存在較低價的冷資料盤中,滿足高性價比的儲存需求。
冷熱資料階層式存放區的儲存策略,具體如下:
社區相容版
儲存策略 | 詳情 |
預設儲存策略 | 將新寫入的資料存放區在熱資料盤中,提供高效查詢。當熱資料存放區量達到業務使用閾值時,自動將當前熱資料盤中佔用空間最大的part資料檔案移動到冷資料盤儲存,從而釋放熱資料盤儲存空間。 |
TTL儲存策略 | 在預設儲存策略基礎上,添加TTL語句,實現將間隔時間之前的所有資料自動轉移到冷資料盤中。 |
企業版
基於全域TTL實現冷熱資料分層,可將不再變化的資料自動轉儲至費用較低的OSS中,以降低使用費用。
全域TTL:企業版通過配置全域TTL控制資料的冷熱分層。
轉儲時刻:開啟冷熱資料階層式存放區功能後,系統將在每天的UTC+0時刻掃描全部資料檔案,並將建立時間長度超過全域TTL的資料part從熱資料盤轉儲到冷資料盤(OSS)。
注意事項
社區相容版
開通冷熱資料階層式存放區功能,請在業務低峰期進行。開通該功能後叢集會立即進行重啟,重啟期間只能查看叢集資訊,無法進行升配、擴容、縮容、修改參數配置等操作。
使用冷熱資料階層式存放區功能時,需要給表指定儲存策略。
建表時,通過
SETTINGS storage_policy = 'hot_to_cold'指定儲存策略。修改存量表的儲存策略。
2024年1月1日之後開通冷熱儲存策略的叢集
執行以下語句進行策略修改。
ALTER TABLE <table_name> MODIFY SETTING storage_policy = 'hot_to_cold';2024年1月1日之前開通冷熱儲存策略的叢集
通過管控營運操作,新增冷熱儲存策略,讓您能夠使用新策略將熱盤資料移轉到冷盤。
冷熱資料階層式存放區功能開通後,暫不支援關閉。
企業版
冷儲存中的資料在發生變化時(如主動下發Mutation、Optimize等操作,或系統基於規則引發的Merge操作),需要重新載入至熱存中完成資料檔案重建。建立的資料檔案不會立刻進入冷儲存,而是在建立時間長度再次超過全域TTL後才會重新轉儲。因此建議盡量避免對冷資料進行頻繁的新增、刪除或修改操作。
轉儲並非立即完成,系統會依據當前儲存系統的訪問壓力等情況動態調整轉儲速率,根據待轉儲資料量可能需要幾小時完成。
修改TTL的生效規則:
調大TTL:將在修改完成後的第一個轉儲時刻生效,但不會將已轉儲到冷儲存的資料重新轉回熱儲存。
調小TTL:將在修改完成後的第一個轉儲時刻生效。
全域TTL的最小值為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美元。
本樣本中的價格僅用於舉例,實際價格以控制台為準。
開通冷熱階層式存放區
社區相容版
登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在的地區。
在集群清單頁面,選擇默認實例列表,單擊目的地組群ID。
單擊左側導覽列的冷熱分層存儲。
單擊點擊開通冷熱分層存儲。
在彈出的提示視窗中,單擊確定。
確定開通後,叢集會進行重啟。待叢集狀態從配置變更中變為运行中,即完成開通。
企業版
雲資料庫 ClickHouse 企業版請先提交工單聯絡支援人員添加冷熱階層式存放區白名單,再按照以下操作步驟開通目的地組群的冷熱階層式存放區功能。
登入雲資料庫ClickHouse控制台,在頁面左上方,選擇叢集所在的地區。
在集群清單頁面,選擇企业版实例列表,單擊目的地組群ID。
單擊左側導覽列的冷熱分層存儲。
單擊點擊開通冷熱分層存儲。
在彈出的提示視窗中,配置全域TTL。
單擊確定。
待叢集狀態變為运行中,冷热分层存储頁面展示為已开启,即開啟成功。
開啟後,可單擊運行參數值中的編輯按鈕調整全域TTL,新的TTL將於下個轉儲周期(次日UTC+0)生效。
社區相容版冷熱階層式存放區策略管理
冷熱分層預設儲存策略
冷熱階層式存放區功能開通後,預設儲存策略的相關參數如下表所示。
參數 | 說明 |
move_factor | 當熱資料盤中的可用儲存空間所佔比例小於該參數時,自動將當前熱資料盤中佔用空間最大的part資料檔案移動到冷資料盤儲存。 取值範圍為 說明 如何查看磁碟空間,請參見查看磁碟空間。 |
prefer_not_to_merge | 冷資料盤中的資料是否進行合并。取值範圍如下。
|
建表時設定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階層式存放區策略之後,還要執行
ALTER TABLE materialize TTL;語句。如果您不期望更改存量資料的TTL階層式存放區策略,需要在更改TTL階層式存放區策略之前,執行SET materialize_ttl_after_modify=0;語句。增量資料:預設情況下,增量資料也將按照新策略進行儲存。
更改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 | 儲存介質。
|
常見問題
Q:資料尚未從熱資料盤儲存至冷資料盤的原因是什嗎?
A:資料是否遷至冷資料盤,取決於system.parts表中move_ttl_info.min和move_ttl_info.max的值大小。您可以使用以下語句擷取二者的值。
SELECT move_ttl_info.min, move_ttl_info.max FROM system.parts WHERE database = '<db_name>' AND table = '<tb_name>' AND disk_name = 'default'如果查詢結果中,目前時間小於任意一個值,則該部分資料不應被移動到冷存。也有可能是系統進行中或準備將該資料移動至冷資料盤的操作,但操作尚未處理完畢。