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

PolarDB:コールドデータ階層型ストレージ機能を有効化して使用する

最終更新日:Aug 04, 2025

このトピックでは、コールドデータ階層型ストレージ機能を有効化して使用する方法について説明します。

制限事項

  • コールドデータ階層型ストレージ機能は、リビジョンバージョンが 2.0.14.21.0 以降の PolarDB for PostgreSQL (Oracle 互換) 2.0 でのみサポートされています。

  • コールドデータ階層型ストレージ機能を有効にした後、無効にすることはできません。コールドデータを削除することはできます。コールドデータが保存されていない場合、コールドデータ階層型ストレージ機能の料金は発生しません。

  • ホットスタンバイが有効になっている PolarDB for PostgreSQL (Oracle 互換) クラスターでは、コールドデータ階層型ストレージ機能を有効にすることはできません。

    説明

    上記のシナリオでコールドデータ階層型ストレージ機能を有効にする場合は、お問い合わせください

  • ホットスタンバイが有効になっている PolarDB for PostgreSQL (Oracle 互換) クラスターに対してコールドデータ階層型ストレージ機能を有効にした後、クラスターのプライマリゾーンを変更することはできません。

    説明

    上記のシナリオでプライマリゾーンを変更する場合は、お問い合わせください

  • 以下の DDL 文はサポートされていません。

    • CREATE DATABASE dbname TABLESPACE OSS: Object Storage Service (OSS) バケットにデータベースを作成します。

    • ALTER DATABASE dbname SET TABLESPACE OSS: 既存のデータベースを OSS バケットにダンプします。

コールドデータ階層型ストレージを有効にする

重要

コールドデータ階層型ストレージを有効にすると、PolarDB クラスターが再起動します。注意して進めてください。

  1. [PolarDB コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。左上隅で、クラスターのリージョンを選択します。クラスターリストで、クラスターを見つけて ID をクリックし、[基本情報] ページに移動します。

  2. 左側のナビゲーションウィンドウで、[設定と管理] > [コールドデータ階層型ストレージ] を選択して、[コールドデータ階層型ストレージ] ページに移動します。

  3. [有効にする] をクリックして、[アーカイブリスト] ページに移動します。

    image

  4. [アーカイブリスト] ページで、[基本情報] セクションと [アーカイブリスト] セクションを表示します。[アーカイブリスト] セクションで、[フルテーブルアーカイブリスト] タブと [パーティションテーブルアーカイブリスト] タブを表示します。

説明
  • コールドデータが保存されていない場合、[アーカイブリスト] セクションにはデータが表示されません。

  • デフォルトでは、コールドデータ階層型ストレージ機能が有効になると、データは統合クラウドドライブの高速記憶媒体に保存されます。簡単な処理の後、データを OSS にダンプできます。詳細については、「コールドストレージモード」をご参照ください。

コールドストレージモード

コールドストレージとは、データテーブル、インデックス、またはマテリアライズドビューを OSS にダンプすることです。ダンプ後、テーブル、インデックス、またはマテリアライズドビューはディスク容量を消費しないか、少量のディスク容量しか消費しないため、ストレージコストが大幅に削減されます。通常のストレージのデータを管理するのと同じ方法で、SQL 文を実行してコールドストレージのデータを管理できます。

データテーブル、インデックス、またはマテリアライズドビューのコールドストレージ

  • 既存のデータテーブル、インデックス、またはマテリアライズドビューを OSS にダンプします。

    ALTER  TABLE  tblname  SET  TABLESPACE OSS;
    ALTER  INDEX  idxname  SET TABLESPACE OSS;
    ALTER Materialized View mvname SET TABLESPACE OSS;
    説明

    デフォルトでは、テーブルに対して ALTER TABLE tblname SET TABLESPACE OSS 文を実行すると、テーブル内のデータのみが OSS にダンプされます。テーブル内のインデックスを OSS にダンプするには、テーブルに対して ALTER INDEX 文を実行します。

  • OSS バケットにデータテーブル、インデックス、またはマテリアライズドビューを作成します。以下の方法がサポートされています。

    • 方法 1: CREATE 文に TABLESPACE OSS 句を追加します。

      CREATE TABLE tblname (...) TABLESPACE OSS;
      CREATE TABLE tblname(...) TABLESPACE OSS as SELECT ...;
      CREATE INDEX idxname ON tblname(columnname) TABLESPACE OSS;
      CREAE INDEX idxname ON tblename USING GiST(columnname) TABLESPACE OSS;
      CREATE MATERIALIZED VIEW table_name TABLESPACE OSS AS query [ WITH [ NO ] DATA ];
    • 方法 2: デフォルトの表領域を OSS バケットに設定します。

      SET default_tablespace = 'oss';
      CREATE  TABLE  tblname  (...) ;
      CREATE  INDEX  idxname ON  tblname(columnname);
      CREAE  INDEX  idxname  ON tblename USING GiST(columnname);
      CREATE MATERIALIZED VIEW  table_name  AS query [ WITH [ NO ] DATA ];
      説明

      この方法を使用すると、データテーブル、インデックス、またはマテリアライズドビューが OSS に作成されます。コールドデータオブジェクトを作成したくない場合は、デフォルトの表領域をリセットする必要があります。

      RESET default_tablespace;

ラージオブジェクト (LOB) フィールドの個別コールドストレージ

LOB フィールドは、PolarDB for PostgreSQL (Oracle 互換) の blob、text、json、jsonb、array、または時空間データ型のいずれかです。単一の LOB フィールドはサイズが大きく、大量のストレージ容量を占有し、頻繁に更新されません。時空間データについては、概要 をご参照ください。LOB フィールドのストレージコストを削減するために、PolarDB for PostgreSQL (Oracle 互換) のコールドデータ階層型ストレージ機能は、LOB フィールドの個別コールドストレージをサポートし、他のフィールドはデータベースディスクに保持します。次の文を実行して、LOB フィールドを OSS にダンプできます。

-- LOB フィールドを含むテーブルを作成します。
CREATE TABLE  test_large_object(id serial, val text);

-- LOB フィールドのみのコールドストレージを実装します。
ALTER TABLE test_large_object alter column val set (storage_type='oss');

-- LOB データをテーブルに挿入します。データは OSS に保存されます。
INSERT INTO test_large_object(val) VALUES((SELECT string_agg(random()::text, ':') FROM generate_series(1, 10000)));

説明

LOB フィールドが OSS に保存されるように事前に指定する必要があります。構成が完了すると、後続の書き込みデータは OSS に保存されます。

パーティションテーブルのコールドストレージ

ほとんどの場合、コールドストレージはパーティションテーブルに使用されます。

  • すべてのパーティションテーブルのコールドストレージ

    • 方法 1: 親パーティションテーブルにある既存の子パーティションテーブルを順番に OSS にダンプします。

      -- prt1 はパーティションテーブル (親テーブル) です。
      -- prt1_p1 は prt1 テーブルの子テーブルです。
      -- prt2_p2 は prt1 テーブルの別の子テーブルです。
      -- prt1_p1 テーブルと prt2_p2 テーブルに対して ALTER 文を実行します。
      ALTER  TABLE  prt1_p1  SET  TABLESPACE OSS;
      ALTER  TABLE  prt1_p2  SET  TABLESPACE OSS;
    • 方法 2: OSS バケットに親パーティションテーブルを作成します。

      CREATE TABLE prt1 (a int, b int) PARTITION BY RANGE(a) TABLESPACE OSS;
      
      -- デフォルトでは、すべての子テーブルは親テーブルの属性を継承し、OSS バケットに作成されます。
      CREATE TABLE prt1_p1 PARTITION OF prt1 FOR VALUES FROM (0) TO (250);
      CREATE TABLE prt1_p2 PARTITION OF prt1 FOR VALUES FROM (250) TO (500);
    • 方法 3: パーティションテーブルを作成する前に、デフォルトの表領域を OSS バケットに設定します。

      SET default_tablespace = 'oss';
      CREATE  TABLE  prt1 (a int, b int) PARTITION BY RANGE(a);
      CREATE TABLE prt1_p1 PARTITION OF prt1 FOR VALUES FROM (0) TO (250);
      CREATE TABLE prt1_p2 PARTITION OF prt1 FOR VALUES FROM (250) TO (500);
  • 一部のパーティションテーブルのコールドストレージ

    期限切れでアクセス頻度の低い子パーティションテーブルのみを OSS にダンプする場合は、子テーブルの表領域を変更できます。期限切れではなく、アクセス頻度の高い子パーティションテーブルは、データベースディスクに保存されたままになります。これは、パーティションテーブルのアクセス パフォーマンスに影響を与えず、ストレージコストを削減します。

    -- prt1 はパーティションテーブル (親テーブル) です。
    -- prt1_p1 は prt1 テーブルの期限切れではない子テーブルです。
    -- prt2_p2 は prt1 テーブルの期限切れの子テーブルです。
    -- prt2_p2 テーブルに対して ALTER 文を実行します。
    ALTER  TABLE  prt1_p2  SET  TABLESPACE OSS;

コールドデータとホットデータの階層型ストレージ

コールドデータのマテリアライズドキャッシュ

polar_smgrcache_size パラメーターの値を変更して、コールドデータのマテリアライズドキャッシュサイズを指定できます。次の手順を実行します。

  1. [PolarDB コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。左上隅で、クラスターのリージョンを選択します。クラスターリストで、クラスターを見つけて ID をクリックし、[基本情報] ページに移動します。

  2. 左側のナビゲーションウィンドウで、[設定と管理] > [パラメーター] を選択します。次に、polar_smgrcache_size パラメーターを見つけて、[変更] をクリックします。

  3. polar_smgrcache_size パラメーターを設定します。次の表に、パラメーターの有効な値を示します。

    キャッシュサイズ

    0

    0 GB (コールドデータのマテリアライズドキャッシュは無効になっています。)

    1

    1 GB

    2

    2 GB

    128

    128 GB (最大値)

  4. 左上隅にある [変更の適用] をクリックします。次に、[変更内容の保存] ダイアログボックスの [OK] をクリックします。パラメーター値を変更すると、クラスターが再起動します。

説明
  • PolarDB for PostgreSQL (Oracle 互換) クラスターでコールドデータ階層型ストレージ機能を有効にすると、少量のマテリアライズドキャッシュ領域がデータベースディスク上に作成され、メタデータと I/O マージが保存されます。より高いパフォーマンスが必要な場合は、データ量とシナリオに基づいて、PolarDB コンソールでコールドデータのマテリアライズドキャッシュサイズを変更できます。変更を有効にするには、データベースを再起動する必要があります。

  • コールドデータ階層型ストレージ機能を有効にして使用した後、polar_smgrcache_size パラメーターの新しい値が 0 の場合、コールドデータのマテリアライズドキャッシュは無効になります。この場合、障害からの回復が遅くなり、再起動中にパラメーターが使用できなくなる可能性があります。障害からの迅速な回復のためにコールドデータのマテリアライズドキャッシュを再度有効にするには、テクニカルサポートにお問い合わせ ください。

コールドデータのマテリアライズドキャッシュを有効にした後、次の文を実行してキャッシュの使用状況をクエリできます。

-- polar_monitor 拡張機能をインストールします。
CREATE extension polar_monitor;

-- マテリアライズドキャッシュの使用状況をクエリします。
SELECT * FROM polar_smgrcaches;

-- フィールドの説明:
  -- smgrcache: キャッシュの ID。
  -- relfilenode: キャッシュに対応するテーブルファイル。
  -- relchunknumber: テーブルファイル内のキャッシュの場所。
  -- nblocks: キャッシュのサイズ。
  -- dirty: キャッシュにダーティブロックが含まれているかどうか。
  -- usagecount: キャッシュがアクセスまたは利用された回数。
  -- pinning_backends: 操作のためにキャッシュに関連付けられている、またはキャッシュに依存しているバックエンドプロセスの数。

-- マテリアライズドキャッシュを OSS に強制的にフラッシュします。
SELECT polar_flush_smgrcache(); 

-- マテリアライズドキャッシュを強制的に削除します。
SELECT polar_evict_smgrcache(); 

コールドデータへのアクセス

コールドデータの追加、削除、変更、およびクエリ

通常のストレージのデータを管理するのと同じ方法で、SQL 文を実行してコールドデータを追加、削除、変更、およびクエリできます。追加の変更は必要ありません。

コールドデータの復元

OSS にダンプされたデータは圧縮されています。OSS に保存されているデータをクラウドディスクに復元する場合は、クラウドディスクに十分なストレージ容量があることを確認してください。ほとんどの場合、必要なストレージ容量は OSS ストレージ容量のおよそ 1.4 ~ 4 倍です。

コールドデータのクリア

通常のストレージで同じオブジェクトを削除するのと同じ方法で、SQL 文を実行してコールドテーブル、インデックス、またはマテリアライズドビューを削除できます。

DELETE  FROM tblname WHERE ...;
TRUNCATE  TABLE  tblname;
DROP  TABLE  tblname;
...