データストレージコストを削減し、クエリパフォーマンスを向上させ、システムリソース使用率を高めるために、ApsaraDB for ClickHouse Community-compatible Edition および Enterprise Edition クラスター (ESSD_L1 または ESSD_L2 ストレージを使用) は、ホットデータとコールドデータの階層型ストレージをサポートしています。 この機能は、データアクセス周波数に基づいて、ホットデータとコールドデータを異なるストレージメディアに保存します。 このトピックでは、階層型ストレージを有効化し、ストレージポリシーを設定する方法について説明します。
前提条件
コミュニティ互換エディション
クラスターのバージョンは 20.8 以降です。
クラスターのデータバックアップ機能は無効になっています。
以前のバージョンを実行しているクラスターで階層型ストレージを使用する場合は、データをバージョン 20.8 以降を実行しているクラスターに移行してから、階層型ストレージを有効にしてください。詳細については、「ApsaraDB for ClickHouse Community-compatible Edition クラスター間のデータ移行」をご参照ください。
Enterprise Edition
クラスターは ESSD_L1 または ESSD_L2 ストレージを使用します。このストレージタイプを使用するには、チケットを送信してこの機能をホワイトリストに追加してください。
背景情報
ホットデータとコールドデータの階層型ストレージは、アクセス頻度に基づいてデータを次の 2 つのカテゴリに分類します。
ホットデータ: 頻繁にアクセスされるデータです。クラスター作成時に選択された ESSD (エンタープライズ SSD) や Ultra ディスクなどのホットデータディスクに保存されます。これにより、高性能なアクセス要件を満たします。
コールドデータ: アクセス頻度の低いデータです。より安価なコールドデータディスクに保存されます。これにより、費用対効果の高いストレージ要件を満たします。
ホットデータとコールドデータの階層型ストレージのストレージポリシーは次のとおりです。
コミュニティ互換エディション
ストレージポリシー | 詳細 |
デフォルトストレージポリシー | 新規データは、効率的なクエリを提供するためにホットデータディスクに書き込まれます。ホットデータの量が指定されたしきい値に達すると、ホットデータディスク上で最も多くのスペースを占めるデータパートは、自動的にコールドデータディスクに移動されます。これにより、ホットデータディスク上のストレージスペースが解放されます。 |
TTL ストレージポリシー | デフォルトストレージポリシーに Time to Live (TTL) ステートメントが追加されます。これにより、指定された時間間隔より前に作成されたすべてのデータが自動的にコールドデータディスクに移動されます。 |
Enterprise Edition
階層型ストレージは、グローバル TTL に基づいて実装されます。変更されなくなったデータは、コスト削減のため、より安価な Object Storage Service (OSS) に自動的にダンプされます。
グローバル TTL: Enterprise Edition は、グローバル TTL を使用してデータ階層化を制御します。
ダンプ時間: 階層型ストレージを有効にすると、システムは毎日協定世界時 (UTC) 00:00 にすべてのデータファイルをスキャンします。グローバル TTL よりも長く存在しているデータパートは、ホットディスクからコールドディスク (OSS) にダンプされます。
注意事項
コミュニティ互換エディション
オフピーク時間中に階層型ストレージを有効にしてください。この機能を有効にすると、クラスターはすぐに再起動します。再起動中は、クラスター情報のみを表示できます。スペックアップ、スケールアウト、スケールイン、またはパラメータ設定の変更はできません。
階層型ストレージを使用する場合は、各テーブルのストレージポリシーを指定する必要があります。
テーブルを作成する際は、
SETTINGS storage_policy = 'hot_to_cold'を使用してストレージポリシーを指定してください。既存のテーブルのストレージポリシーを変更します。
2024 年 1 月 1 日以降に階層型ストレージポリシーが有効になったクラスターの場合
ポリシーを変更するには、次のステートメントを実行してください。
ALTER TABLE <table_name> MODIFY SETTING storage_policy = 'hot_to_cold';2024 年 1 月 1 日より前に階層型ストレージポリシーが有効になったクラスターの場合
O&M 操作を通じて新しい階層型ストレージポリシーを追加します。これにより、新しいポリシーを使用してホットディスクからコールドディスクにデータを移行できます。
階層型ストレージを有効にすると、無効にすることはできません。
Enterprise Edition
コールドストレージ内のデータが変更された場合、データファイルを再構築するためにホットストレージに再読み込みされます。変更には、実行する `Mutation` または `Optimize` 操作、あるいはシステムがルールに基づいてトリガーする `Merge` 操作が含まれます。新しいデータファイルはすぐにコールドストレージに移動されません。グローバル TTL よりも長く存在している場合にのみ、再度ダンプされます。したがって、コールドデータへの頻繁な追加、削除、または変更は避けてください。
ダンプ操作は即座には実行されません。システムは、ストレージシステムへの現在のアクセス負荷などの要因に基づいて、ダンプ速度を動的に調整します。操作の完了には、ダンプされるデータ量に応じて数時間かかる場合があります。
TTL 変更が有効になるためのルール:
TTL を増やす: 変更は次のダンプ時に有効になります。ただし、すでにコールドストレージにダンプされているデータは、ホットストレージに戻されません。
TTL を減らす: 変更は次のダンプ時に有効になります。
グローバル TTL の最小値は 1 日です。最小調整ステップサイズは 1 日です。
課金
課金ルールは以下のとおりです。
ストレージタイプ
課金の詳細
ホットデータストレージ
クラスターを購入すると、そのストレージ容量に相当するホットデータストレージ領域が付与されます。
コールドデータストレージ
コールドデータストレージは従量課金方式で課金されます。事前に固定容量のストレージ領域を購入する必要はありません。実際に使用したストレージ領域に対して、時間単位で課金されます。
コールドデータストレージの詳細な料金については、「Community Edition バケット料金」および「Enterprise Edition 従量課金方式」をご参照ください。
課金計算式:コールドストレージ料金 = コールドデータストレージの単位価格 × コールドデータストレージ使用量 × 使用持続時間
たとえば、コールドデータストレージの単位価格が 0.000026 USD/GB/時間であり、19:00 から 20:00 まで 2,000 GB のコールドストレージを使用した場合、合計料金は 0.000026 USD/GB/時間 × 2,000 GB × 1 時間 = 0.052 USD となります。また、20:00 から 21:00 の間に 500 GB のコールドストレージ領域をリリースし、1,500 GB を使用した場合、当該時間帯の合計料金は 0.000026 USD/GB/時間 × 1,500 GB × 1 時間 = 0.039 USD となります。
これらの例示価格は参考用であり、実際の料金はコンソール上に表示される価格が優先されます。
ホットデータとコールドデータの階層化ストレージの有効化
Community-compatible Edition
ApsaraDB for ClickHouse コンソール にログインします。ページ左上隅で、クラスターが配置されているリージョンを選択します。
クラスターリスト ページで、Community Edition インスタンスのリスト タブをクリックし、その後、対象クラスターの ID をクリックします。
左側のナビゲーションウィンドウで、冷間および熱間レイヤードストレージ をクリックします。
クリックしてホットおよびコールドレイヤードストレージを開きます をクリックします。
表示されたダイアログボックスで、OK をクリックします。
確認後、クラスターが再起動します。クラスターのステータスが 設定変更中 から 実行中 に変更された時点で、機能が有効化されます。
Enterprise Edition
ApsaraDB for ClickHouse Enterprise Edition の場合、まずホットデータとコールドデータの階層化ストレージ機能をホワイトリストに追加するためのチケットを送信してください。その後、以下の手順に従って、対象クラスターに対してこの機能を有効化します。
ApsaraDB for ClickHouse コンソール にログインします。ページ左上隅で、クラスターが配置されているリージョンを選択します。
クラスターリスト ページで、Enterprise Edition インスタンスのリスト タブをクリックし、その後、対象クラスターの ID をクリックします。
左側のナビゲーションウィンドウで、冷間および熱間レイヤードストレージ をクリックします。
クリックしてホットおよびコールドレイヤードストレージを開きます をクリックします。
表示されたダイアログボックスで、グローバル TTL を設定します。
OK をクリックします。
クラスターのステータスが 実行中 に変更され、ストレージ階層化 ページに 有効 と表示された時点で、機能が有効化されます。
機能を有効化した後は、パラメーター値の実行 の横にある編集アイコンをクリックして、グローバル TTL を調整できます。新しい TTL は、次のダンプエポック(翌日の協定世界時 (UTC) 00:00)から適用されます。
Community互換エディションの階層型ストレージポリシーの管理
ホットデータとコールドデータの階層型ストレージのデフォルトストレージポリシー
階層型ストレージを有効にすると、デフォルトストレージポリシーには次のパラメーターが設定されます。
パラメーター | 説明 |
move_factor | ホットデータディスクの空き領域の割合がこの値より小さい場合、ホットデータディスク上で最も多くの領域を占めるデータ部分が自動的にコールドデータディスクに移動されます。 値は 説明 ディスク領域の表示方法については、「ディスク領域の表示」をご参照ください。 |
prefer_not_to_merge | コールドデータディスク上のデータをマージするかどうかを指定します。有効な値は次のとおりです。
|
テーブル作成時のTTLベースの階層型ストレージポリシーの設定
デフォルトストレージポリシーにTTLステートメントを追加します。これにより、指定された時間間隔より前に作成されたすべてのデータが自動的にコールドデータディスクに移動されます。
構文
TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk'パラメーターの説明
パラメーター | 説明 |
time_column | DateまたはDateTimeデータ型のカラム。 |
number | 時間間隔。 一般的な単位は Day、Week、Month、Year です。 |
TTL句の詳細については、「TTL」をご参照ください。
例
`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ベースの階層型ストレージポリシーで、Dateまたは日付型カラムと時間間隔を変更できます。
注意事項
データへの影響
既存データ: デフォルトでは、既存データは新しいポリシーに従って保存されます。このプロセスは非同期であり、時間がかかります。変更をすぐに有効にするには、ポリシーを変更した後に
ALTER TABLE materialize TTL;ステートメントを実行します。既存データのストレージポリシーを変更したくない場合は、ポリシーを変更する前にSET materialize_ttl_after_modify=0;ステートメントを実行します。増分データ: デフォルトでは、増分データも新しいポリシーに従って保存されます。
ポリシーを変更した後、すでにコールドデータディスクに存在するデータは自動的にホットデータディスクに移動されません。データを移動するには、「ホットディスクとコールドディスク間のデータ移動」をご参照ください。
構文
ALTER TABLE <table_name> ON CLUSTER default MODIFY TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk';パラメーターの説明
パラメーター | 説明 |
table_name | テーブル名。 |
time_column | ターゲットのDateまたは日付型カラム。 |
number | 時間間隔。 一般的な単位は Day、Week、Month、Year です。 |
Community 対応エディションにおけるデータ管理
ホットディスクとコールドディスク間でのデータ移動
ホットデータディスクからコールドデータディスクへデータを移動します。
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 | ディスク上の空き領域。コールドデータディスクの空き領域には制限はありません。単位:バイト。 |
total_space | ディスク上の合計領域。コールドデータディスクの空き領域には制限はありません。単位:バイト。 |
used_space | ディスク上の使用済み領域。単位:バイト。 |
keep_free_space | 予約済みの空き領域。単位:バイト。 |
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'現在の時刻が、返されたいずれかの値よりも前である場合、そのデータパーティションはコールドストレージに移動されません。また、システムによるデータ移動処理の実行中で、まだ操作が完了していない可能性も考えられます。