AnalyticDB for MySQL は、ホットデータとコールドデータの階層化ストレージをサポートしています。 ホットデータとコールドデータを異なるストレージメディアに移動することで、ホットデータの高いクエリパフォーマンスを確保し、コールドデータのストレージコストを削減できます。
概要
ビッグデータのシナリオでは、業務テーブルには、ログデータ、注文データ、モニタリングデータなど、大量の業務データが含まれる可能性があります。時間の経過とともに、特定のデータへのアクセス頻度は低下し、コールドデータとみなされます。ただし、コールドデータはストレージ容量を占有します。その結果、ストレージコストが増加します。
AnalyticDB for MySQL のホットデータとコールドデータの階層化ストレージは、日付と時間でパーティション化されたテーブルに適用できます。 AnalyticDB for MySQL クラスターは、指定されたホットパーティションの数とパーティションキーの値に基づいて、パーティションを降順にソートします。 最大 N 個のパーティションはホットパーティションとみなされ、その他のパーティションはコールドパーティションとみなされます。 コールドパーティションのデータは、ストレージコストを削減するために、低コストの Object Storage Service (OSS) に移動できます。 ホットパーティションのデータは SSD に残り、高いクエリパフォーマンスを確保します。
前提条件
AnalyticDB for MySQL クラスターでホットデータとコールドデータの階層化ストレージを使用する前に、次の要件が満たされていることを確認してください。
クラスターが Enterprise Edition、Basic Edition、Data Lakehouse Edition、または エラスティックモードの Data Warehouse Edition であること。
クラスターのマイナーバージョンが 3.1.3.3 以降であること。
説明AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。
課金ルール
クラスターを使用する場合、従量課金制に基づいてホットデータとコールドデータのストレージに対して課金されます。 詳細については、「料金」をご参照ください。
ストレージプラン を使用して、AnalyticDB for MySQL のデータストレージコストを相殺できます。
ホットデータとコールドデータのストレージポリシー
AnalyticDB for MySQL は、コールドストレージ、ホットストレージ、混合ストレージの 3 つのホットデータとコールドデータのストレージポリシーを提供します。
コールドストレージは費用対効果の高いストレージポリシーです。 このストレージポリシーを使用する場合、すべてのデータは ゾーン冗長ストレージ (ZRS) モードで OSS に保存されます。
ホットストレージは、高アクセス パフォーマンス要件を満たすことができるストレージポリシーです。 このストレージポリシーを使用する場合、すべてのデータは SSD に保存されます。 このポリシーは最高のクエリパフォーマンスを提供しますが、最高のストレージコストが必要です。
混合ストレージは、ホットパーティションを SSD に保存し、コールドパーティションを OSS に保存できるストレージポリシーです。 このポリシーは、ホットパーティションの高いクエリパフォーマンスを確保し、コールドパーティションのストレージコストを削減します。 次のセクションでは、混合ストレージポリシーの原則について説明します。
混合ストレージポリシーを使用する場合は、ホットパーティションの数を指定する必要があります。 パーティションは、パーティションキーの値によって降順にソートされます。 ホットパーティションの数が N に設定されている場合、SSD に保存されている最初の N 個のパーティションはホットパーティションであり、OSS に保存されている他のパーティションはコールドパーティションです。 ホットパーティションとコールドパーティションの分布は、パーティションの数が変更されると変更される場合があります。 詳細については、このトピックの「パーティション数の変更がホットパーティションとコールドパーティションの分布に与える影響」セクションをご参照ください。
パーティション数の変更がホットパーティションとコールドパーティションの分布に与える影響
ホットパーティションの数が N であるとします。 新しいパーティションが挿入されると、すべてのパーティションが再ソートされ、N 個のホットパーティションのみが存在するようにします。
ホットパーティションの数が N であり、ホットパーティションの数を M に変更するとします。
M が N より大きい場合、
M - Nパーティションのデータはコールドパーティションからホットパーティションに移動されます。M が N より小さい場合、
N - Mパーティションのデータはホットパーティションからコールドパーティションに移動されます。
ホットデータとコールドデータのストレージポリシーを指定する
テーブルを作成する際に、
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_partition_count | ホットパーティションの数。 |
cold_partition_count | コールドパーティションの数。 |
rt_total_size | リアルタイムデータの合計サイズ。 rt_data_size パラメーターと rt_index_size パラメーターの合計です。単位: バイト。 |
rt_data_size | リアルタイムデータのサイズ。単位: バイト。 |
rt_index_size | リアルタイムデータのプライマリキーとインデックスデータのサイズ。単位: バイト。 |
hot_total_size | ホットパーティションのデータの合計サイズ。 hot_data_size パラメーターと hot_index_size パラメーターの合計です。単位: バイト。 |
hot_data_size | ホットパーティションのデータのサイズ。単位: バイト。 |
hot_index_size | ホットパーティションのプライマリキーとインデックスデータのサイズ。単位: バイト。 |
cold_total_size | コールドパーティションのデータの合計サイズ。 cold_data_size パラメーターと cold_index_size パラメーターの合計です。単位: バイト。 |
cold_data_size | コールドパーティションのデータのサイズ。単位: バイト。 |
cold_index_size | コールドパーティションのプライマリキーとインデックスデータのサイズ。単位: バイト。 |
注:
rt_total_size、rt_data_size、rt_index_size、hot_total_size、hot_data_size、hot_index_size、cold_total_size、cold_data_size、cold_index_size パラメーターの値は、INSERT、UPDATE、DELETE、BUILD 文の実行によって異なります。
データを書き込んだ後、hot_total_size パラメーターと cold_total_size パラメーターの値が両方とも 0 の場合、データはリアルタイムで同期されます。 rt_total_size パラメーターは、リアルタイムデータのサイズを示します。 BUILD 文を実行して、リアルタイムデータを既存データに変換できます。 BUILD ジョブが完了すると、hot_total_size パラメーターと cold_total_size パラメーターを表示できます。
定義された hot_partition_count パラメーターは、単一シャード内のホットパーティションの数を指定しますが、クエリされた hot_partition_count パラメーターは、シャードが統合された後のホットパーティションの数を示します。 データパーティションがシャード全体で異なる方法で分散されている場合、クエリされた hot_partition_count パラメーターの値は、定義された hot_partition_count パラメーターの値よりも大きくなる可能性があります。
たとえば、テーブル A にはシャード 1 とシャード 2 が含まれており、hot_partition_count は 2 に設定されています。次の図は、テーブル A のデータパーティションの分布を示しています。
シャード 1: P4 と P5 はホットパーティションです。 P1、P2、P3 はコールドパーティションです。
シャード 2: 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 | 元のストレージポリシー。有効な値:
|
source_hot_partition_count | 元のホットパーティションの数。 |
dest_storage_policy | 新しいストレージポリシー。有効な値:
|
dest_hot_partition_count | 新しいホットパーティションの数。 |
hot_to_cold_partition_count | ホットパーティションからコールドパーティションに変更されたパーティションの数。 |
cold_to_hot_partition_count | コールドパーティションからホットパーティションに変更されたパーティションの数。 |
hot_to_cold_data_size | ホットパーティションからコールドパーティションに変更されたデータのサイズ。単位: バイト。 |
cold_to_hot_data_size | コールドパーティションからホットパーティションに変更されたデータのサイズ。単位: バイト。 |
hot_data_size_before_change | ストレージポリシーが変更される前のホットデータのサイズ。単位: バイト。 |
cold_data_size_before_change | ストレージポリシーが変更される前のコールドデータのサイズ。単位: バイト。 |
hot_data_size_after_change | ストレージポリシーが変更された後のホットデータのサイズ。単位: バイト。 |
cold_data_size_after_change | ストレージポリシーが変更された後のコールドデータのサイズ。単位: バイト。 |
start_time | ストレージポリシーが変更された時間範囲の開始。 |
update_time | ストレージポリシーが変更された時間範囲の終了。 |
progress | ストレージポリシーの変更の進捗状況。単位: %。 |
status | ストレージポリシーの変更ステータス。有効な値:
|