全部產品
Search
文件中心

AnalyticDB:資料存放區冷熱分離

更新時間:Mar 21, 2025

AnalyticDB for MySQL資料冷熱分離功能會將冷熱資料分別儲存在不同的介質上,在保證熱資料查詢效能的同時,降低冷資料的儲存成本。

為什麼要使用資料冷熱分離

在海量巨量資料情境下,一張業務表中可能儲存著大量的業務資料(例如日誌資料、訂單資料或監控資料)。隨著時間的推移,部分資料的訪問頻率會逐漸降低,最終被擱置。但是這部分資料依舊會佔用儲存空間,導致儲存成本增加。

AnalyticDB for MySQL資料冷熱分離主要適用於按時間日期分區的表。叢集會根據指定的熱分區數量,按照分區的大小(分區索引值的大小)降序排序,最大的N個分區為熱分區,其餘分區為冷分區。冷分區的資料會移動到成本更低的Object Storage Service服務OSS中,降低儲存成本;與此同時,熱分區的資料仍然儲存在SSD盤中,保證資料查詢的高效能。

前提條件

AnalyticDB for MySQL叢集需要同時滿足以下條件:

費用說明

叢集在使用過程中,儲存熱資料和冷資料佔用的儲存空間會隨用隨付。計費詳情請參見產品定價

說明

支援使用儲存資源套件抵扣儲存空間。

冷熱儲存策略

AnalyticDB for MySQL冷熱儲存策略分為全冷儲存、全熱儲存、冷熱混合儲存。

  • 全冷儲存指資料全部儲存在OSS中,採用同城冗餘儲存(多AZ),是一種較為經濟的儲存策略。

  • 全熱儲存指資料全部儲存在SSD盤,滿足高效能訪問的需求,查詢效能最好,但儲存成本最高。

  • 冷熱混合儲存指熱分區資料存放區在SSD盤,冷分區資料存放區在OSS。既保證熱分區資料的查詢效能,又節省冷分區資料的儲存成本。其原理如下:

    冷熱混合儲存需指定熱分區數。假設熱分區數為N,在按照分區的大小(分區索引值的大小)降序排序後,最大的N個分區為熱分區,儲存在SSD盤,其餘分區為冷分區,儲存在OSS中,形成冷熱分區布局。冷熱分區布局不是固定不變的,當分區數量變更時,會重新調整冷熱分區布局。詳細說明,請參見分區數量變更對冷熱分區布局的影響

分區數量變更對冷熱分區布局的影響

  • 假設當前熱分區數為N,在有新的分區資料寫入時,冷熱儲存策略會對所有分區重新排序,超過N的舊資料會遷移到冷分區。

    點擊查看示意圖

    如圖所示,設定的熱分區數為5,當新增分區20241226之後,20241226為當前最大的分區,在BUILD之後該分區需要放在熱分區中,但是當前熱分區數已滿5,冷熱儲存策略會從熱分區中選一個最小的分區20241221遷移到冷分區,並把20241226放在熱分區中。

  • 假設當前熱分區數為N,修改熱分區的數量為M。

    • 當熱分區數增加,即M>N時,會從冷分區遷移M-N個分區資料到熱分區。

      點擊查看示意圖

      如圖所示,當前熱分區數為5, 修改熱分區數為6後,冷熱儲存策略會從冷分區遷移一個最大的分區20241220到熱分區中。

    • 當熱分區數減少,即M<N時,會從熱分區遷移N-M個分區資料到冷分區。

      點擊查看示意圖

      當前熱分區數為5, 修改熱分區數為4後,冷熱儲存策略會從熱分區遷移一個最小的分區到冷分區中。

指定冷熱儲存策略

  • 建立表時指定冷熱儲存策略:您可以在建表時通過storage_policy參數來指定表的冷熱儲存策略。

  • 為已有的表指定冷熱儲存策略:您可以通過ALTER TABLE語句指定表的冷熱儲存策略。

查詢表的冷熱儲存策略

文法

  • 查詢所有表的冷熱儲存策略:

    SELECT * FROM information_schema.table_usage;
  • 查詢單個表的冷熱儲存策略:

    SELECT * FROM information_schema.table_usage WHERE table_schema='<schema_name>' AND table_name='<table_name>';

傳回值說明

參數

說明

table_schema

資料庫名。

table_name

表名。

storage_policy

儲存策略。取值如下:

  • HOT:全熱儲存。

  • COLD:全冷儲存。

  • MIXED:冷熱混合儲存。

hot_partition_count

熱分區數量。

cold_partition_count

冷分區數量。

rt_total_size

即時資料總量(單位:Byte),是rt_data_sizert_index_size的總和。

rt_data_size

即時資料量(單位:Byte)。

rt_index_size

即時資料的主鍵和索引大小(單位:Byte)。

hot_total_size

熱分區總資料量(單位:Byte),是hot_data_sizehot_index_size的總和。

hot_data_size

熱分區的資料量(單位:Byte)。

hot_index_size

熱分區資料的主鍵和索引大小(單位:Byte)。

cold_total_size

冷分區總資料量(單位:Byte),是cold_data_sizecold_index_size的總和。

cold_data_size

冷分區的資料量(單位:Byte)。

cold_index_size

冷分區資料的主鍵和索引大小(單位:Byte)。

傳回值注意事項:

  • 受到INSERT、UPDATE、BUILD的影響,rt_total_sizert_data_sizert_index_sizehot_total_sizehot_data_sizehot_index_sizecold_total_sizecold_data_sizecold_index_size會即時變動。

  • 如果在寫入資料後hot_total_sizecold_total_size都為0,則表示資料還在即時同步中。rt_total_size表示即時資料量。您可以通過BUILD語句將即時資料轉換為歷史資料,待BUILD完成後可以查到hot_total_sizecold_total_size

  • 由於定義的hot_partition_count是單個分區(Shard)內的熱分區數量,而table_usage表查詢到的hot_partition_count是按照Shard UNION之後的結果,在各Shard內分區資料不一致的情況下,可能會出現table_usage表中查詢到的hot_partition_count大於定義的hot_partition_count

    例如:tableA有兩個Shard(Shard1和Shard2),並且定義了hot_partition_count=2,此時Shard內的資料分布情況如下圖。

    Shard1:熱分區為P4、P5,冷分區為P1、P2、P3。

    Shard2:熱分區為P3、P4,冷分區為P1、P2。

    最終計算的實際熱分區為(P4、P5)UNION(P3、P4)=(P3、P4、P5),因此實際hot_partition_count=3。

查詢表的冷熱儲存策略變更進度

在使用ALTER TABLE語句修改表的冷熱儲存策略後,您可以通過查詢表storage_policy_modify_progress來查看冷熱變更進度。

文法

  • 查詢所有表的冷熱儲存策略變更進度:

    SELECT * FROM information_schema.storage_policy_modify_progress;
  • 查詢單個表的冷熱儲存策略變更進度:

    SELECT * FROM information_schema.storage_policy_modify_progress WHERE table_schema='<schema_name>' AND table_name='<table_name>';

傳回值說明

參數

說明

table_schema

資料庫名。

table_name

表名。

task_id

執行冷熱變更任務的ID。

source_storage_policy

原儲存策略。取值如下:

  • HOT:全熱儲存。

  • COLD:全冷儲存。

  • MIXED:冷熱混合儲存。

source_hot_partition_count

原熱分區數量。

dest_storage_policy

目標儲存策略。取值如下:

  • HOT:全熱儲存。

  • COLD:全冷儲存。

  • MIXED:冷熱混合儲存。

dest_hot_partition_count

目標熱分區數量。

hot_to_cold_partition_count

熱分區到冷分區變更的分區數量。

cold_to_hot_partition_count

冷分區到熱分區變更的分區數量。

hot_to_cold_data_size

熱分區到冷分區變更的資料量(單位:Byte)。

cold_to_hot_data_size

冷分區到熱分區變更的資料量(單位:Byte)。

hot_data_size_before_change

變更前熱資料量(單位:Byte)。

cold_data_size_before_change

變更前冷資料量(單位:Byte)。

hot_data_size_after_change

變更後熱資料量(單位:Byte)。

cold_data_size_after_change

變更後冷資料量(單位:Byte)。

start_time

開始變更時間。

update_time

結束變更時間。

progress

變更進度(單位:百分比)。

status

變更狀態。取值如下:

  • INIT:未開始變更。

  • RUNNING:進行中變更。

  • FINISH:變更完成。