このトピックでは、コールドデータ階層ストレージを有効化して使用する方法について説明します。
適用性
バージョン要件
サポートされているリージョン
エリア | リージョン |
中国 | 中国 (杭州) |
中国 (上海) | |
中国 (深セン) | |
中国 (北京) | |
その他 | シンガポール |
制限事項
-
コールドデータ階層ストレージ機能は、一度有効にすると無効にできません。可能なのはコールドデータの削除のみです。データが保存されていない場合、この機能に対する課金は発生しません。
-
ホットスタンバイが有効になっている または クラスターでは、コールドデータ階層ストレージを有効にすることはできません。
説明これらのシナリオでこの機能を有効にする必要がある場合は、お問い合わせください。
-
ホットスタンバイが有効になっている または クラスターでは、コールドデータ階層ストレージを有効にした後、 においてことはできません。
説明このシナリオでプライマリゾーンを変更する必要がある場合は、お問い合わせください。
-
次の DDL ステートメントはサポートされていません。
-
OSS テーブル空間にデータベースを作成することはできません:
CREATE DATABASE dbname TABLESPACE OSS; -
単一の操作で既存のデータベースを OSS テーブル空間に移動することはできません:
ALTER DATABASE dbname SET TABLESPACE OSS;
-
機能の有効化
コールドデータ階層ストレージを有効にすると、PolarDB クラスターが再起動します。この操作は、メンテナンスウィンドウ中に実行するように計画してください。
-
PolarDB コンソール にログインします。左側メニューで、クラスター をクリックします。クラスターが配置されている [Region] を選択し、クラスターを見つけてその ID をクリックします。
-
左側メニューで、構成・ amp; の管理 > コールドデータ階層化ストレージ を選択すると、PolarDBコールドデータ階層型ストレージ ページが開きます。
-
ワンクリックで有効化 をクリックすると、データアーカイブ一覧 ページが開きます。
ページの上部には、コールドストレージインスタンス ID、機能が有効になった時刻、リージョン、データサイズなどの基本情報が表示されます。下のアーカイブリストセクションには、[Whole table archive list]、[Partition table archive list]、および [LOB field archive list] タブがあります。テーブルの列には、テーブル名、データベース名、アーカイブされた合計データサイズ、アーカイブステータスなどの項目があります。
-
このページでは、インスタンスの 基本情報 と、テーブル全体のアーカイブリスト、パーティションテーブルアーカイブリスト、および [LOB field archive list] を含む データアーカイブ一覧 を表示できます。
-
コールドデータが保存されていない場合、データアーカイブ一覧 は空です。
-
機能が有効になると、データはデフォルトで高速なクラウドディスクに保存されます。データを OSS のコールドストレージに移動するには、簡単な操作が必要です。詳細については、「データをコールドストレージに移動する方法」をご参照ください。
データをコールドストレージに移動する方法
データをコールドストレージに移動するとは、テーブル、インデックス、またはマテリアライズドビューを OSS に転送することを意味します。転送後、これらのオブジェクトはデータベースのクラウドディスク上のスペースをほとんど占有しなくなり、ストレージコストが大幅に削減されます。コールドデータに対する DML およびクエリ操作は透過的であり、変更は不要です。
標準テーブル、インデックス、マテリアライズドビュー
-
既存のテーブル、インデックス、またはマテリアライズドビューをコールドストレージに移動します。
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 に移動します。インデックスを移動するには、インデックスごとに個別の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; CREATE 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); CREATE INDEX idxname ON tblename USING GiST(columnname); CREATE MATERIALIZED VIEW table_name AS query [ WITH [ NO ] DATA ];説明デフォルトのテーブル空間を
ossに設定すると、新しいテーブル、インデックス、およびマテリアライズドビューが OSS に直接作成されます。コールドストレージでのオブジェクトの作成を停止するには、デフォルトのテーブル空間をリセットします:RESET default_tablespace;
-
LOB フィールドの独立したストレージ
では、LOB フィールドは blob、text、json、jsonb、array データ型、および を指します。これらのデータ型のオブジェクトは通常サイズが大きく、大量のストレージ領域を消費しますが、更新頻度は低いです。このようなシナリオでコストを削減するため、 のコールドデータ階層化ストレージ機能では、他のフィールドのストレージを変更することなく、LOB フィールドをコールドストレージに別途格納できます。単一の SQL 文を使用して、LOB フィールドをコールドストレージに移動できます。使用方法は次のとおりです。
-- ラージオブジェクトフィールドを持つテーブルを作成します。
CREATE TABLE test_large_object(id serial, val text);
-- ラージオブジェクトフィールドを独立してコールドストレージに移動します。
ALTER TABLE test_large_object alter column val set (storage_type='oss');
-- ラージオブジェクトデータを挿入します。 text フィールドの内容は OSS に保存されます。
INSERT INTO test_large_object(val) VALUES((SELECT string_agg(random()::text, ':') FROM generate_series(1, 10000)));
データを書き込む前に、LOB フィールドのストレージを oss に設定する必要があります。この変更後に書き込まれたデータのみが OSS に保存されます。
パーティションテーブルでのコールドストレージ
パーティションテーブルは、コールドストレージの一般的なユースケースであり、特定のアーカイブ方法があります。
-
すべてのパーティションをコールドストレージに移動します。
-
方法 1: 既存の子パーティションをコールドストレージに 1 つずつ移動します。
-- prt1 はパーティションテーブル (親テーブル) です。 -- prt1_p1 は prt1 の子パーティションです。 -- prt1_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_p2 は期限切れの子パーティションです。 -- 期限切れの子パーティションで ALTER 操作を実行します。 ALTER TABLE prt1_p2 SET TABLESPACE OSS;
ホットデータとコールドデータの階層化
コールドデータ用マテリアライズドキャッシュ
polar_smgrcache_size パラメーターを変更することで、コールドデータ用の マテリアライズドキャッシュ のサイズを設定できます。
-
PolarDB コンソール にログインします。左側メニューで、クラスター をクリックします。クラスターが配置されている [Region] を選択し、クラスターを見つけてその ID をクリックします。
-
左側メニューで、構成・ amp; の管理 > パラメータ設定 を選択します。
polar_smgrcache_sizeパラメーターを見つけて [Modify Parameter] をクリックします。 -
次の例に示すように、
polar_smgrcache_sizeパラメーターを設定します。値
キャッシュサイズ
0
0 (キャッシュ無効)
1
1 GB
2
2 GB
128
128 GB (現在の最大値)
-
左上隅の 変更を送信 をクリックします。変更内容の保存 ダイアログボックスで、確定 をクリックします。このパラメーターを変更すると、クラスターが再起動します。
-
コールドデータ階層ストレージを有効にすると、 または は、デフォルトでクラウドディスク上に少量のマテリアライズドキャッシュ領域を割り当てます。このキャッシュはメタデータを保存し、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 テーブル空間に保存されているオブジェクト) に対する DML およびクエリ操作は透過的であり、変更は不要です。
コールドデータの復元
データは OSS に移動される際に圧縮されます。OSS からクラウドディスクにデータを復元する必要がある場合は、クラウドディスクに十分なストレージ容量があることを確認してください。必要な容量は、通常、OSS 内のデータサイズの 1.4 倍から 4 倍です。
コールドデータの削除
コールドテーブル、インデックス、またはマテリアライズドビューを削除するための SQL ステートメントは、変更の必要はありません。
DELETE FROM tblname WHERE ...;
TRUNCATE TABLE tblname;
DROP TABLE tblname;
...