このトピックでは、コールドデータの階層化ストレージ機能を有効にして使用する方法について説明します。
適用範囲
バージョン要件
PolarDB for PostgreSQL クラスターでサポートされているバージョン:
マイナーエンジンバージョンが 2.0.16.9.6.0 以降の PostgreSQL 16。
マイナーエンジンバージョンが 2.0.14.10.21.0 以降の PostgreSQL 14。
サポートされているリージョン
エリア | リージョン |
中国 | 中国 (杭州) |
中国 (上海) | |
中国 (深圳) | |
中国 (北京) | |
その他 | シンガポール |
制限事項
コールドデータの階層化ストレージ機能を有効にすると、無効にすることはできません。コールドデータを削除することのみ可能です。コールドデータが保存されていない場合、この機能に対する課金は発生しません。
ホットスタンバイが有効になっている PolarDB for PostgreSQL または クラスターでは、コールドデータの階層化ストレージ機能を有効にすることはできません。
説明このシナリオでコールドデータの階層化ストレージ機能を有効にするには、弊社までお問い合わせください。
ホットスタンバイが有効になっている PolarDB for PostgreSQL または クラスターでコールドデータの階層化ストレージ機能を有効にした後、プライマリゾーンを変更することはできません。
説明このシナリオでプライマリゾーンを変更するには、弊社までお問い合わせください。
次の DDL 文はサポートされていません:
OSS 表領域にデータベースを作成することはできません:
CREATE DATABASE dbname TABLESPACE OSS;現在、単一のコマンドを使用してデータベース全体を OSS 表領域に転送することはできません:
ALTER DATABASE dbname SET TABLESPACE OSS;
機能を有効にする
コールドデータの階層化ストレージ機能を有効にすると、PolarDB クラスターが再起動します。それに応じて操作を計画し、注意して進めてください。
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。クラスターが配置されているリージョンを選択します。クラスターを見つけてその ID をクリックし、クラスターの詳細ページを開きます。
左側のナビゲーションウィンドウで、[設定と管理] > [コールドデータ階層化ストレージ] を選択して、[PolarDB コールドデータ階層化ストレージ] ページを開きます。
[今すぐ有効にする] をクリックして、[データアーカイブ一覧] ページを開きます。

このページには、[基本情報] と [データアーカイブ一覧] セクションが表示されます。[データアーカイブ一覧] セクションには、[全テーブルアーカイブ一覧] タブと [パーティションテーブルアーカイブ一覧] タブが含まれています。
コールドデータが保存されていない場合、[データアーカイブ一覧] は空です。
この機能を有効にすると、データはデフォルトで高速ディスク記憶媒体に保存されます。データをコールドデータとして保存するには、OSS に転送する必要があります。詳細については、「コールドストレージモード」をご参照ください。
コールドストレージモード
コールドストレージでは、データテーブル、インデックス、またはマテリアライズドビューを OSS に転送します。転送後、これらのオブジェクトはディスク領域をほとんど、またはまったく占有しなくなるため、データベースのストレージコストが大幅に削減されます。データがコールドストレージに移動された後、すべての DML および DQL 文は透過的であり、変更は不要です。
標準テーブル、インデックス、マテリアライズドビューのコールドストレージ
既存のデータテーブル、インデックス、またはマテリアライズドビューをコールドストレージに移動します。
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 に設定すると、その後のすべての CREATE TABLE、CREATE INDEX、および CREATE MATERIALIZED VIEW 操作は、オブジェクトを OSS ストレージに直接作成します。コールドストレージにオブジェクトを作成する必要がなくなった場合は、デフォルトの表領域をリセットできます:
RESET default_tablespace;
LOB フィールドの個別コールドストレージ
この機能は PostgreSQL 16 ではサポートされていません。
LOB フィールドには、PolarDB for PostgreSQL および の blob、text、json、jsonb、および配列データ型のフィールドと、時空間データ型が含まれます。これらのオブジェクトは多くの場合サイズが大きく、かなりのストレージ領域を占有し、更新頻度も低いです。これらのシナリオでコストを削減するために、PolarDB for PostgreSQL および のコールドデータの階層化ストレージ機能を使用すると、LOB フィールドのみをコールドストレージに移動し、他のフィールドは元の記憶媒体に残すことができます。単一の SQL 文を使用して、LOB フィールドをコールドストレージに移動できます:
--LOB フィールドを含むテーブルを作成します。
CREATE TABLE test_large_object(id serial, val text);
--LOB フィールドのみをコールドストレージに移動します。
ALTER TABLE test_large_object alter column val set (storage_type='oss');
--LOB データを書き込みます。text フィールドの内容は OSS に保存されます。
INSERT INTO test_large_object(val) VALUES((SELECT string_agg(random()::text, ':') FROM generate_series(1, 10000)));データを書き込む前に、LOB フィールドのストレージを OSS に設定する必要があります。これを行った後、これらのフィールドに書き込まれた新しいデータは OSS に保存されます。
パーティションテーブルのコールドストレージ
コールドストレージの一般的なユースケースは、パーティションテーブルです。パーティションテーブルで階層化ストレージ機能を使用するための特別なメソッドが利用可能です。
すべてのパーティションをコールドストレージに移動します。
方法 1: 既存の子パーティションを順次コールドストレージに移動します。
--prt1 はパーティションテーブル (親テーブル) です。 --prt1_p1 は prt1 の子テーブルです。 --prt2_p2 は prt1 の別の子テーブルです。 --すべての子テーブルで 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);
一部の子パーティションをコールドストレージに移動します:
期限切れ (アクセス頻度の低い) の子パーティションのみをコールドストレージに移動するには、それらのパーティションの表領域のみを変更します。期限切れでない (アクセス頻度の高い) 子パーティションは移動されず、データベースディスク上に残ります。このアプローチにより、パーティションテーブルのアクセスパフォーマンスに影響を与えることなく、ストレージコストを削減できます。
--prt1 はパーティションテーブル (親テーブル) です。 --prt1_p1 は prt1 の期限切れでない子テーブルです。 --prt2_p2 は prt1 の期限切れの子テーブルです。 --期限切れの子テーブルで ALTER 文を実行します。 ALTER TABLE prt1_p2 SET TABLESPACE OSS;
ホットデータとコールドデータの階層化ストレージ
コールドデータのマテリアライズドキャッシュ
polar_smgrcache_size パラメーターを変更して、コールドデータのマテリアライズドキャッシュのサイズを設定できます。
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。クラスターが配置されているリージョンを選択します。クラスターを見つけてその ID をクリックし、クラスターの詳細ページを開きます。
左側のナビゲーションウィンドウで、[設定と管理] > [パラメーター] を選択します。
polar_smgrcache_sizeパラメーターを見つけて、[パラメーターの変更] をクリックします。次の例に示すように、
polar_smgrcache_sizeパラメーターを設定します。値
キャッシュサイズ
0
0 (キャッシュは無効)
1
1 GB
2
2 GB
128
128 GB (サポートされている最大値)
ページの左上隅にある [変更を送信] をクリックします。[変更を保存] ダイアログボックスで、[OK] をクリックします。このパラメーターを変更すると、クラスターが再起動します。
PolarDB for PostgreSQL または クラスターでコールドデータの階層化ストレージ機能を有効にすると、デフォルトでディスク上に少量のマテリアライズドキャッシュ領域が作成されます。この領域は、メタデータの保存や一部の I/O マージに使用されます。より高いパフォーマンスを得るには、データ量とシナリオに基づいてコンソールでマテリアライズドキャッシュサイズを調整できます。この変更は、データベースの再起動後に有効になります。
コールドデータの階層化ストレージ機能を有効にして使用を開始した後、
polar_smgrcache_sizeパラメーターを 0 に設定すると、キャッシュ機能が無効になります。これにより、クラッシュからの回復が非常に遅くなる可能性があります。再起動中にこのパラメーターを再度有効にすることはできません。この問題が発生した場合は、弊社までお問い合わせいただき、キャッシュ機能を再度有効にしてクラッシュからの回復を高速化するようリクエストできます。
コールドデータのマテリアライズドキャッシュを有効にした後、次のようにキャッシュの使用状況をクエリできます:
-- 拡張機能を作成します。
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(); コールドデータへのアクセス
コールドデータの追加、削除、変更、クエリ
コールドデータ (すでに OSS 表領域に保存されているオブジェクト) の追加、削除、変更、およびクエリを行う SQL 文は透過的であり、変更は不要です。
コールドデータの復元
データは OSS に転送される際に圧縮されます。OSS からディスクにデータを復元する場合は、ディスクに十分なストレージ領域があることを確認してください。必要な領域は、通常、データが OSS 上で占有するストレージ領域の 1.4 倍から 4 倍です。
コールドデータのクリア
コールドテーブル、インデックス、またはマテリアライズドビューを削除するための SQL 文も透過的であり、変更は不要です。
DELETE FROM tblname WHERE ...;
TRUNCATE TABLE tblname;
DROP TABLE tblname;
...