すべてのプロダクト
Search
ドキュメントセンター

Hologres:階層型ストレージ

最終更新日:Feb 28, 2026

Hologres V1.3.37 以降は、ホットデータとコールドデータに対応する階層型ストレージをサポートしており、データ階層を効果的に管理するのに役立ちます。このトピックでは、階層型ストレージの使用方法について説明します。

機能紹介

Hologres は、次の2つのストレージタイプを提供しています。標準と低頻度アクセス。

  • 標準ストレージは、オールSSDホットストレージを使用します。これは Hologres のデフォルトのストレージタイプであり、低レイテンシ、高性能なデータアクセス要件を満たします。ほとんどのシナリオにおいて、標準ストレージは最も効果的で費用対効果の高いオプションです。このドキュメントでは、これを ホットストレージ と呼びます。

  • 低頻度アクセスストレージは、オールHDDコールドストレージを使用します。これは、アクセス頻度の低いデータに対する低コストのストレージニーズを満たし、レイテンシの影響を受けにくい、またはめったにアクセスされない非常に大規模なデータセットに適しています。このドキュメントでは、これを コールドストレージ と呼びます。

  • プライマリ/セカンダリインスタンスの場合、コールドストレージを有効にするには、Hologres V1.3.55 以降にアップグレードしてください。

Hologres はテーブルレベルの階層型ストレージもサポートしています。「CREATE PARTITION TABLE」機能を使用して、パーティション子テーブルの記憶媒体を動的に設定できます。

Hologres V2.1 以降では、コールドストレージのアクセス速度を向上させるために、SSDベースのキャッシュアクセラレーションがサポートされています。現在サポートされているのは、デフォルトで割り当てられたキャッシュスペースのみです。キャッシュアクセラレーションはデフォルトで有効になっており、アクセスパフォーマンスを2倍以上に向上させます。

前提条件

  • Hologres V1.3.37 以降のみが階層型ホットストレージとコールドストレージをサポートしています。ご利用のインスタンスが以前のバージョンを実行している場合は、「Common upgrade preparation failure errors」ガイドを使用するか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「オンラインサポートをさらに利用する方法」をご参照ください。

  • 以前のバージョンを実行しているサブスクリプションインスタンスの場合、Hologres V1.3.37 にアップグレードすると、低頻度アクセスストレージクォータはデフォルトで0 GBになります。

注意事項

  • Hologres のテーブルストレージは、データとメタで構成されます。データはユーザーデータを保存し、メタはテーブルメタデータを保存します。階層型ストレージでは、データの部分にのみ記憶媒体を設定できます。パフォーマンス上の理由から、メタは常にホットストレージに保存されます。したがって、テーブルのストレージポリシーをコールドストレージに設定した場合でも、少量のホットストレージを消費し、わずかなホットストレージ料金が発生します。

  • サービスへの影響を避けるため、ホットからコールドへのデータ移行タスクは低優先度で実行されます。テーブルのデータストレージポリシーを変更しても、その変更はすぐに有効になりません。Hologres はバックグラウンドで非同期にデータ移行を実行します。デフォルトでは、移行は深夜に開始されます。Hologres V2.2 以降では、移行時間をカスタマイズできます。詳細については、「動的パーティション管理」をご参照ください。

  • コールドストレージテーブルに新しいデータを書き込む際、データは最初にホットストレージに書き込まれます。バックグラウンドタスクが非同期にコールドストレージに移行するため、いくらかのホットストレージ料金が発生します。

  • ディスクシーク時間の制限により、Flink ディメンションテーブルやサービングシナリオなどのポイントクエリシナリオにはコールドストレージテーブルを使用しないでください。コールドストレージテーブルは、ホットストレージテーブルよりも2桁低い読み取りスループットをサポートします。

  • 行指向テーブルをコールドストレージを使用するように設定しないでください。

  • バッチホットからコールドへのデータ変換中、すべてのテーブル tablet が開かれ、メモリ使用量が増加します。一度に200テーブルを超えて変換しないでください。

階層型ストレージテーブルの作成

テーブルを作成する際、SET_TABLE_PROPERTY で storage_mode パラメーターを設定して、データストレージポリシーを指定します。詳細については、「CREATE TABLE」をご参照ください。

非パーティションテーブル

非パーティションテーブルのストレージポリシー設定

非パーティションテーブルの場合、SET_TABLE_PROPERTY を使用してストレージポリシーを設定します。サポートされているオプションは次のとおりです。

  • hot (ホットストレージ)。

  • cold (コールドストレージ)。

例えば、tbl1をコールドストレージを使用するように設定するには、次のコードを実行します。

-- Specify cold storage when creating the table
BEGIN;
CREATE TABLE tbl1 (
 "id" INT NOT NULL,
 "name" TEXT NOT NULL
);
CALL set_table_property('tbl1', 'storage_mode', 'cold');
COMMIT;

非パーティションテーブルの記憶媒体変更

Hologres はテーブル作成後に記憶媒体を変更することをサポートしています。例えば、tbl1をホットストレージに変更すると、システムはデータをホットストレージに非同期に移行します。例:

-- Change storage medium to hot storage after table creation
CALL set_table_property('tbl1', 'storage_mode', 'hot');

パーティションテーブル

パーティションテーブルのストレージポリシー設定

パーティションテーブルも SET_TABLE_PROPERTY を使用してストレージポリシーを設定します。子パーティションはデフォルトで親テーブルのストレージプロパティを継承しますが、個別に設定することもできます。サポートされているオプションは次のとおりです。

  • hot (ホットストレージ)。

  • cold (コールドストレージ)。

例えば、親パーティションテーブル (tbl2) をコールドストレージに設定すると、すべての子パーティション (tbl2_v1など) がコールドストレージを使用するようになります。コード:

-- Specify cold storage when creating the table
BEGIN;
CREATE TABLE tbl2(
  c1 TEXT NOT NULL,
  c2 TEXT
)
PARTITION BY LIST(c2);
CALL set_table_property('tbl2', 'storage_mode', 'cold');
CREATE TABLE tbl2_v1 PARTITION OF tbl2 FOR VALUES IN ('v1');
COMMIT;

パーティションテーブルのストレージ変更

Hologres はテーブル作成後に記憶媒体を変更することをサポートしています。例えば、親パーティションテーブル tbl2 をホットストレージに変更すると、すべての子パーティションがホットストレージに非同期に移行されます。例:

-- Change storage policy to hot storage after table creation
CALL set_table_property('tbl2', 'storage_mode', 'hot');

特定のパーティションをコールドストレージに設定するには、そのパーティションの storage_mode プロパティを変更します。システムは直ちにそのパーティションをコールドストレージに移行し始めます。例:

-- Create multiple child partitions

CREATE TABLE tbl2_v2 PARTITION OF tbl2 FOR VALUES IN ('v2');
CREATE TABLE tbl2_v3 PARTITION OF tbl2 FOR VALUES IN ('v3');

-- Query table properties; they currently inherit the parent's hot storage setting

SELECT * FROM hg_table_storage_status('public', 'tbl2');

-- Change a child partition to cold storage

CALL set_table_property('tbl2_v3', 'storage_mode', 'cold');
                

パーティションテーブルの記憶媒体の動的管理

パーティション記憶媒体をインテリジェントに管理するには、動的パーティショニングを使用してホットからコールドへのデータ変換ルールを定義します。これにより、コストとパフォーマンスのバランスを効果的にとるスマート階層型ストレージが可能になります。動的パーティション管理の詳細については、「動的パーティション管理」をご参照ください。

記憶媒体ステータスのクエリ

hg_table_storage_status 関数を呼び出して、テーブルストレージステータスを確認します。hg_table_storage_status はデータストレージサイズのみを表示し、メタストレージサイズは除外します。使用方法:

SELECT * FROM hg_table_storage_status('<schema_name>', '<table_name>');

パラメーター

説明

schema_name

テーブルのスキーマ名

table_name

テーブル名

次の結果が返されます。

列名

内容

table_name

  • 非パーティションテーブル:テーブル名

  • 親パーティションテーブル:子パーティション名。子パーティションごとに1行を返します

  • 子パーティションテーブル:子パーティション名

hot_size

ホットストレージサイズ (バイト単位)

cold_size

コールドストレージサイズ (バイト単位)

status

ステータス:

  • hot:データはホットストレージにあります

  • cold:データはコールドストレージにあります

  • transferring:データは移行中です

例:

-- Non-partitioned table
SELECT * FROM hg_table_storage_status('public', 'tbl1');-- returns size in bytes
 table_name | hot_size |   cold_size   | status
------------+----------+---------------+--------
 tbl1       |  145643  |      3685     | transferring

-- Parent partition table
SELECT * FROM hg_table_storage_status('public', 'tbl2');-- returns size in bytes
   table_name    | hot_size | cold_size | status
-----------------+----------+-----------+--------
 tbl2_2022062222 |        0 |         0 | hot
 tbl2_2022062221 |     1125 |         0 | hot
 tbl2_2022062220 |     1245 |         0 | hot
 tbl2_2022062219 |     1358 |         0 | hot
 tbl2_2022062218 |        0 |      1875 | cold
 tbl2_2022062217 |        0 |      1143 | cold
 tbl2_2022062216 |        0 |      1299 | cold

クエリテーブルのアクセス頻度

Hologres V1.3.37 以降、ログシステムテーブル hologres.hg_table_info は、インスタンス内のテーブルに関する日次統計を収集します。このデータを使用して、ターゲットを絞った最適化のためにテーブル情報を表示および分析します。詳細については、「テーブル統計の表示と分析」をご参照ください。このテーブルをクエリして、ホット/コールドストレージボリューム、テーブルアクセス頻度、およびパーティションアクセス頻度を取得し、ホットからコールドへのデータ変換を実行するかどうかを決定します。サンプルクエリ:

非パーティションテーブル

SELECT a.table_name,
       (a.total_read_count - b.total_read_count) AS read_count,
       (a.total_write_count - b.total_write_count) AS write_count,
       a.hot_storage_size
FROM (SELECT * FROM hologres.hg_table_info
      WHERE type='TABLE' AND collect_time::DATE = CURRENT_DATE - interval '1 day') a
JOIN
    (SELECT * FROM hologres.hg_table_info
    WHERE type='TABLE' AND collect_time::DATE = CURRENT_DATE - interval '${days} day') b
ON a.table_name = b.table_name
ORDER BY hot_storage_size DESC;

パーティションテーブル

すべてのパーティションをクエリします。

SELECT parent_table_name,COUNT(*) AS partition_cnt, 
       sum(hot_storage_size)/1024/1024/1024 AS hot_size_gb 
FROM hologres.hg_table_info
WHERE type = 'PARTITION' AND collect_time::DATE = CURRENT_DATE - interval '1 day'
GROUP BY parent_table_name
ORDER BY hot_size_gb DESC;