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

Hologres:階層型ストレージ

最終更新日:Feb 04, 2026

Hologres はバージョン V1.3.37 以降、ホットデータとコールドデータの階層型ストレージをサポートしており、データ階層の効率的な管理を支援します。本トピックでは、階層型ストレージの使用方法について説明します。

機能概要

Hologres には、標準と低頻度アクセスという 2 種類のデータストレージがあります。

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

  • 低頻度アクセスストレージは、すべて HDD を使用したコールドストレージです。アクセス頻度が低いデータ向けに低コストなストレージを提供し、レイテンシ秘密度が低く、またはアクセスがまれな非常に大規模なデータセットに適しています。本ドキュメントでは、これをコールドストレージと呼びます。

  • プライマリ・セカンダリインスタンスの場合、コールドストレージを有効にするには、バージョン V1.3.55 以降へのスペックアップを推奨します。

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

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

前提条件

  • ホットデータとコールドデータの階層型ストレージは、Hologres V1.3.37 以降でのみサポートされています。ご利用のインスタンスがそれ以前のバージョンの場合、一般的なスペックアップ準備エラー」をご参照ください。または、Hologres DingTalk グループにご参加いただき、サポートを受けてください。詳細については、「オンラインサポートをさらに利用する方法」をご参照ください。

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

注意事項

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

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

  • 新しいデータがコールドストレージテーブルに書き込まれる際、まずホットストレージに書き込まれます。その後、バックグラウンドタスクが非同期にデータをコールドストレージへ移行するため、若干のホットストレージ料金が発生します。

  • ディスクのシーク時間の制限により、ポイントクエリシナリオ(Flink ディメンションテーブルやサービングシナリオなど)でのコールドストレージテーブルの使用は推奨しません。コールドストレージテーブルの読み取りスループットは、ホットストレージテーブルと比べて 2 桁ほど低くなります。

  • 行指向テーブルをコールドストレージに設定することは推奨しません。

  • バッチによるホットからコールドへのデータ変換中は、すべてのテーブル tablet がオープンされるため、メモリ使用量が増加します。一度に変換するテーブル数は 200 以下にすることを推奨します。

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

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

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

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

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

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

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

たとえば、テーブル tbl1 をコールドストレージに設定する場合は、次のコードを使用します。

-- テーブル作成時にコールドストレージを指定
BEGIN;
CREATE TABLE tbl1 (
 "id" int NOT NULL,
 "name" text NOT NULL
);
CALL set_table_property('tbl1', 'storage_mode', 'cold');
COMMIT;

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

テーブル作成後も記憶媒体を変更できます。たとえば、テーブル tbl1 をホットストレージに変更すると、非同期でデータがホットストレージへ移行されます。例:

-- テーブル作成後に記憶媒体をホットストレージに変更
CALL set_table_property('tbl1', 'storage_mode', 'hot');

パーティションテーブル

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

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

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

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

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

-- テーブル作成時にコールドストレージを指定
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;

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

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

-- テーブル作成後にストレージポリシーをホットストレージに変更
CALL set_table_property('tbl2', 'storage_mode', 'hot');

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

-- 複数の子パーティションを作成

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

-- テーブルプロパティを確認(現在は親のホットストレージ設定を継承)

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

-- 子パーティションをコールドストレージに設定

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 行につき 1 つの子パーティション)

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

hot_size

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

cold_size

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

status

ステータス:

  • hot:データがホットストレージにある

  • cold:データがコールドストレージにある

  • transferring:データ移行中

例:

-- 非パーティションテーブル
SELECT * FROM hg_table_storage_status('public', 'tbl1');-- バイト単位でサイズを返す
 table_name | hot_size |   cold_size   | status
------------+----------+---------------+--------
 tbl1       |  145643  |      3685     | transferring

-- 親パーティションテーブル
SELECT * FROM hg_table_storage_status('public', 'tbl2');-- バイト単位でサイズを返す
   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

テーブルアクセス頻度の照会

V1.3.37 以降、Hologres はインスタンス内のテーブルに関する日次統計情報を収集するためのシステムログテーブル 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;

特定のパーティションのアクセス頻度を照会:

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 = 'PARTITION'
      AND parent_table_name = '${p_table_name}'
      AND collect_time::DATE = CURRENT_DATE - interval '1 day') a
JOIN
     (SELECT * FROM hologres.hg_table_info
     WHERE type = 'PARTITION'
     AND parent_table_name = '${p_table_name}'
     AND collect_time::DATE = CURRENT_DATE - interval '${days} day') b
ON a.table_name = b.table_name
ORDER BY table_name DESC;