データストレージのコストを削減し、クエリパフォーマンスとシステムリソースの使用率を向上させるために、ApsaraDB for ClickHouseはホットデータとコールドデータの階層ストレージを提供します。 クエリ頻度に基づいて、さまざまな種類のディスクにデータを保存できます。 このトピックでは、ホットデータとコールドデータの階層ストレージを有効にし、階層ストレージポリシーを設定する方法について説明します。
前提条件
ApsaraDB for ClickHouseクラスター
V20.8以降が作成されます。ApsaraDB for ClickHouseクラスターのデータバックアップ機能は無効になっています。
バージョンがこの機能をサポートしていないApsaraDB for ClickHouseクラスターでホットデータとコールドデータの階層ストレージを使用する場合は、V20.8以降のApsaraDB for ClickHouseクラスターを作成し、新しいクラスターにデータを移行できます。 詳細については、「ApsaraDB For ClickHouse Community-compatible Editionクラスター間のデータ移行」をご参照ください。
ApsaraDB for ClickHouse Enterprise Editionは、ホットデータをキャッシュに、コールドデータを共有ストレージに自動的に保存します。 ホットデータとコールドデータの階層ストレージは、ホットデータとコールドデータのストレージルールに依存しません。
背景情報
ホットデータは、頻繁にアクセスされ、拡張SSD (ESSD) またはウルトラディスクに保存されるデータです。 これらのディスクは、クラスターを作成するときに選択されます。 ホットデータストレージは、高性能なクエリを必要とするビジネスシナリオに適しています。
コールドデータは、頻繁にアクセスされないデータです。 コールドデータは、コスト効率の高いストレージの要件を満たすために、低ストレージコストでコールドデータディスクに保存されます。
ホットデータとコールドデータの階層ストレージは、次のストレージポリシーを提供します。
ストレージポリシー
説明
デフォルトのストレージポリシー
新しく書き込まれたデータは、効率的なクエリをサポートするためにホットデータディスクに保存されます。 格納されたホットデータの量が格納しきい値に達すると、ホットデータディスク内で最大サイズの部品データファイルが自動的にコールドデータディスクに移行されます。 このようにして、新たに書き込まれたホットデータをホットデータディスクに記憶することができる。
生存時間 (TTL) に基づくストレージポリシー
デフォルトのストレージポリシーにTTL句を追加します。 このようにして、TTL句で指定された期間より前に生成されたすべてのデータは、自動的にコールドデータディスクに移行されます。
注意事項
オフピーク時にのみホットデータとコールドデータの階層ストレージを有効にすることを推奨する場合。 ホットデータとコールドデータの階層ストレージを有効にすると、クラスターが再起動されます。 再起動中は、クラスター情報のみを表示できます。 クラスターのアップグレード、スケールアウト、スケールイン、またはパラメーター設定の変更はできません。
ホットデータとコールドデータの階層ストレージを使用する場合、テーブルのストレージポリシーを指定する必要があります。
テーブルを作成するときは、
SETTINGS storage_policy = 'hot_to_cold 'を使用してデータストレージポリシーを指定できます。既存のテーブルのデータストレージポリシーを変更できます。
2024年1月1日以降に有効になったホットデータとコールドデータの階層ストレージを持つクラスター
次のステートメントを実行して、データストレージポリシーを変更します。
ALTER TABLE <table_name> MODIFY SETTING storage_policy = 'hot_to_cold';2024年1月1日より前に有効になったホットデータとコールドデータの階層ストレージを持つクラスター
ホットおよびコールドデータストレージポリシーの追加を申請するチケットを起票します。 これにより、ポリシーを使用して、ホットデータディスクからコールドデータディスクにデータを移行できます。
ホットデータとコールドデータの階層ストレージ機能は、この機能を有効にした後は無効にできません。
課金
次のルールに基づいて、ホットデータおよびコールドデータ機能の階層ストレージに対して課金されます。
ストレージタイプ
課金の詳細
ホットデータストレージ
クラスター用に購入するストレージ容量は、ホットデータ専用です。 クラスターを購入した後、ホットデータ用の追加ストレージを購入する必要はありません。
コールドデータストレージ
従量課金の課金方法に基づいて、コールドデータストレージに対して課金されます。 ストレージを使用する前に、コールドデータ用のストレージを購入する必要はありません。 使用済みストレージに基づいて、1時間ごとにコールドデータストレージに対して課金されます。
コールドデータストレージの単価の詳細については、「ApsaraDB For ClickHouseクラスターのストレージ料金」をご参照ください。
課金式: コールドストレージスペースの料金=コールドデータストレージの単価 × 使用済みコールドデータストレージ × 使用期間。
たとえば、コールドデータストレージの単価がGB-時間あたりUSD 0.000026で、19:00から20:00まで2,000 GBのコールドデータが保存されている場合、合計料金は次の式に基づいて計算されます。GB-時間あたりUSD 0.000026 × 2,000 GB × 1時間=USD 0.052。 20:00〜21:00の間にコールドデータ用に500 GBのストレージスペースを解放した場合、1,500 GBのストレージのみが使用されます。 この場合、20:00〜21:00の間に発生する合計料金は、次の式に基づいて計算されます。GB時間あたりのUSD 0.000026 × 1,500 GB × 1時間=USD 0.039。
前述の価格はあなたの参照のためにだけ提供されます。 実際の課金シナリオでは、ApsaraDB for ClickHouseコンソールに表示される料金が優先されます。
ホットデータとコールドデータの階層化ストレージの有効化
ApsaraDB for ClickHouse コンソールにログインします。
上部のナビゲーションバーで、クラスターがデプロイされているリージョンを選択します。
[クラスター] ページで、[コミュニティ互換版のクラスター] タブをクリックし、管理するクラスターのIDをクリックします。
左側のナビゲーションウィンドウで、[コールドおよびホットレイヤードストレージ] をクリックします。
クリックして階層ストレージを有効にするをクリックします。
[階層ストレージの有効化] メッセージで、[OK] をクリックします。
その後、システムはクラスターを再起動します。 クラスターの状態が [設定の変更] から [実行中] に変更されると、ホットデータとコールドデータの階層ストレージが有効になります。
ホットデータとコールドデータの階層ストレージが有効化された後に使用されるデフォルトストレージポリシー
次の表に、ホットデータとコールドデータの階層ストレージが有効になった後に使用されるデフォルトのストレージポリシーのパラメーターを示します。
パラメーター | 説明 |
move_factor | ホットデータの全ストレージに対するホットデータの使用可能なストレージの割合がmove_factorパラメーターの値より小さい場合、ホットデータディスク内で最大のサイズの部品データファイルが自動的にコールドデータディスクに移行されます。 有効値: 説明 ディスク領域の表示方法の詳細については、このトピックの「ディスク領域の表示」をご参照ください。 |
prefer_not_to_merge | コールドデータディスク上のデータをマージするかどうかを指定します。 有効な値:
|
TTLベースの階層ストレージポリシーの追加
デフォルトのストレージポリシーにTTL句を追加します。 このようにして、TTL句で指定された期間より前に生成されたすべてのデータは、自動的にコールドデータディスクに移行されます。
構文
TTL <time_column> + INTERVAL <number> TO DISK 'cold_disk'Parameters
パラメーター | 説明 |
time_column | DATEまたはDATETIMEデータ型の列。 |
数値 | 移行するデータが生成されるまでの期間。 一般的な単位は、日、週、月、年です。 |
TTL句の詳細については、「TTL」をご参照ください。
例
日付列に基づいて、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ベースの階層ストレージポリシーで、日付または日付タイプの列を指定するtime_columnパラメーターと間隔を指定するnumberパラメーターを変更できます。
使用上の注意
データへの影響
既存のデータ: デフォルトでは、TTLベースの階層ストレージポリシーを変更した後、システムは新しいストレージポリシーに基づいて既存のデータを保存します。 しかし、データを非同期に格納するには時間がかかる。 新しいストレージポリシーをすぐに有効にするには、TTLベースの階層ストレージポリシーを変更した後に
ALTER TABLEマテリアライズ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 | <td class="en-UStry align-left colsep-1 rowsep-1">テーブル名。</td> |
time_column | 新しいストレージポリシーの日付または日付タイプの列。 |
数値 | 移行するデータが生成されるまでの期間。 一般的な単位は、日、週、月、年です。 |
ホットデータディスクとコールドデータディスクのデータを移行する
次のステートメントを実行して、ホットデータディスクからコールドデータディスクにデータを移行します。
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 | ディスク名。
|
パス | ディスク上のデータが格納されるパス。 |
free_space | ディスク上の使用可能なスペース。 コールドデータディスク上の利用可能なスペースは制限されない。 単位はバイトです。 |
total_space | 合計ディスク容量。 コールドデータディスク上の利用可能なスペースは制限されない。 単位はバイトです。 |
used_space | ディスク上で使用されるスペース。 単位はバイトです。 |
keep_free_space | ディスク上の予約済みの空き容量。 単位はバイトです。 |
type | ストレージメディア。 有効な値:
|
よくある質問
データがホットデータディスクからコールドデータディスクに移行されないのはなぜですか?
move_ttl_info.minおよびmove_ttl_info.maxパラメーターの値を表示して、データがホットデータディスクからコールドデータディスクに移行されているかどうかを確認できます。 次のステートメントを実行して、2つのパラメーターの値を照会できます。
SELECT move_ttl_info.min,move_ttl_info.max FROM system.parts WHERE database = '<db_name>'AND table = '<tb_name>'AND disk_name = 'default'現在の時刻がいずれかの戻り値よりも前の場合、データはコールドデータディスクに移行されません。 さらに、システムは、データを移行しているか、または移行の準備をしている。 移行が完了していません。