このトピックでは、コールドデータ階層型ストレージ機能を有効化して使用する方法について説明します。
制限事項
コールドデータ階層型ストレージ機能は、リビジョンバージョンが 2.0.14.21.0 以降の PolarDB for PostgreSQL (Oracle 互換) 2.0 でのみサポートされています。
コールドデータ階層型ストレージ機能を有効にした後、無効にすることはできません。コールドデータを削除することはできます。コールドデータが保存されていない場合、コールドデータ階層型ストレージ機能の料金は発生しません。
ホットスタンバイが有効になっている PolarDB for PostgreSQL (Oracle 互換) クラスターでは、コールドデータ階層型ストレージ機能を有効にすることはできません。
説明上記のシナリオでコールドデータ階層型ストレージ機能を有効にする場合は、お問い合わせください。
ホットスタンバイが有効になっている PolarDB for PostgreSQL (Oracle 互換) クラスターに対してコールドデータ階層型ストレージ機能を有効にした後、クラスターのプライマリゾーンを変更することはできません。
説明上記のシナリオでプライマリゾーンを変更する場合は、お問い合わせください。
以下の DDL 文はサポートされていません。
CREATE DATABASE dbnameTABLESPACE OSS: Object Storage Service (OSS) バケットにデータベースを作成します。ALTER DATABASE dbnameSET TABLESPACE OSS: 既存のデータベースを OSS バケットにダンプします。
コールドデータ階層型ストレージを有効にする
コールドデータ階層型ストレージを有効にすると、PolarDB クラスターが再起動します。注意して進めてください。
[PolarDB コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。左上隅で、クラスターのリージョンを選択します。クラスターリストで、クラスターを見つけて ID をクリックし、[基本情報] ページに移動します。
左側のナビゲーションウィンドウで、[設定と管理] > [コールドデータ階層型ストレージ] を選択して、[コールドデータ階層型ストレージ] ページに移動します。
[有効にする] をクリックして、[アーカイブリスト] ページに移動します。

[アーカイブリスト] ページで、[基本情報] セクションと [アーカイブリスト] セクションを表示します。[アーカイブリスト] セクションで、[フルテーブルアーカイブリスト] タブと [パーティションテーブルアーカイブリスト] タブを表示します。
コールドデータが保存されていない場合、[アーカイブリスト] セクションにはデータが表示されません。
デフォルトでは、コールドデータ階層型ストレージ機能が有効になると、データは統合クラウドドライブの高速記憶媒体に保存されます。簡単な処理の後、データを 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 パラメーターの値を変更して、コールドデータのマテリアライズドキャッシュサイズを指定できます。次の手順を実行します。
[PolarDB コンソール] にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。左上隅で、クラスターのリージョンを選択します。クラスターリストで、クラスターを見つけて ID をクリックし、[基本情報] ページに移動します。
左側のナビゲーションウィンドウで、[設定と管理] > [パラメーター] を選択します。次に、
polar_smgrcache_sizeパラメーターを見つけて、[変更] をクリックします。polar_smgrcache_sizeパラメーターを設定します。次の表に、パラメーターの有効な値を示します。値
キャッシュサイズ
0
0 GB (コールドデータのマテリアライズドキャッシュは無効になっています。)
1
1 GB
2
2 GB
128
128 GB (最大値)
左上隅にある [変更の適用] をクリックします。次に、[変更内容の保存] ダイアログボックスの [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;
...