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

ApsaraDB RDS:TPC機能を使用する

最終更新日:May 28, 2024

インスタンスタイプを変更せずに、ストレージ使用量を削減し、ApsaraDB RDS for PostgreSQLインスタンスの読み取りパフォーマンスを向上させたい場合は、透過ページ圧縮 (TPC) 機能を使用できます。 この機能は、バッファプール内のページデータをリアルタイムで圧縮および解凍します。 これにより、ストレージコストが効果的に削減され、I/Oスループットが向上します。 しかしながら、この特徴はCPU性能を低下させる。

前提条件

RDSインスタンスはPostgreSQL 14以降を実行します。 それでもTPC機能がサポートされていない場合は、RDSインスタンスのマイナーエンジンバージョンを更新する必要があります。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

機能の説明

TPC機能は、バッファプール内のページデータをリアルタイムで圧縮および解凍します。 データは、データがディスクに書き込まれるときに自動的に圧縮され、データがディスクから読み出されるときに解凍される。 圧縮および解凍プロセスは、ユーザには知覚できない。

TPC機能は、ストレージ使用量を減らし、RDSインスタンスの読み取りパフォーマンスを向上させるために開発されています。 この機能により、ディスクI/Oとストレージの使用量が削減され、キャッシュの効率が向上し、データを圧縮することでデータ転送が高速化されます。

シナリオ

CPU使用率が50% 未満です。 IOPSまたはI/Oスループットがボトルネックになることがよくあります。

メリット

  • ストレージコストは平均して約50% 削減されます。

  • I/O使用量は平均で約50% 削減されます。

  • 読み取りシナリオでは、1秒あたりのトランザクション (TPS) が増加します。 I/Oスルーが上限に達するいくつかの読み取りシナリオでは、TPSは最大100% 増加します。

影響

  • この機能により、RDSインスタンスのCPU使用率が向上します。 データ圧縮に使用されるCPUリソースは約260% 増加し、データ解凍に使用されるCPUリソースは約40% 増加します。

  • 書き込みシナリオでは、TPSが減少します。

  • RDSインスタンスに対して透過データ暗号化 (TDE) 機能も有効になっている場合、TPC機能の圧縮結果が影響を受けます。

  • TPC機能は、TOASTデータに対して不十分に機能します。

手順

  1. 機能はテーブルスペースに依存するため、TPC機能を使用するために圧縮用のテーブルスペースを作成します。

    CREATE TABLESPACE rds_compress LOCATION '/data/postgresql/rds_compress' WITH(COMPRESSION='zstd');
    重要

    この手順で作成されるテーブルスペースの名前、パス、および圧縮アルゴリズムは変更しないでください。

  2. 圧縮用のテーブルまたはインデックスを作成します。

    • テーブルとインデックスを作成または変更するときは、TPC機能を使用するために圧縮するテーブルスペースを指定します。

      • テーブル圧縮

        -- テーブルを作成するときは、TPC機能を使用するために圧縮するテーブルスペースを指定します。
        CREATE TABLE <tablename> ... TABLESPACE rds_compress;
        
        -テーブルを変更するときは、テーブルのテーブルスペースを圧縮用のテーブルスペースに変更します。
        ALTER TABLE <tablename> SET TABLESPACE rds_compress; 
      • インデックス圧縮

        -- インデックスを作成するときは、TPC機能を使用するために圧縮用のテーブルスペースを指定します。
        CREATE INDEX <indexname> ... TABLESPACE rds_compress;
        
        -インデックスを変更するときは、インデックスのテーブルスペースを圧縮用のテーブルスペースに変更します。
        ALTER INDEX <indexname> SET TABLESPACE rds_compress; 
    • デフォルトのテーブルスペースを圧縮用のテーブルスペースに変更します。 このように、TPC機能はデフォルトで新しいテーブルとインデックスに使用されます。

      -- デフォルトのテーブルスペースを圧縮用のテーブルスペースに設定します。
      default_tablespaceを 'rds_compress' に設定します。-テーブルまたはインデックスを作成するときは、テーブルスペースを指定する必要はありません。 デフォルトでは、TPC機能が使用されます。 
      CREATE TABLE <tablename> ...;
      CREATE INDEX <indexname> ...; 

関連クエリ

  • テーブルまたはインデックスが圧縮用のテーブルスペースに作成されているかどうかを確認します。

    1. psqlコマンドラインで、\d + <テーブル名> を入力して、テーブルの詳細を照会します。

      テーブルとインデックスが圧縮用のテーブルスペースに作成されている場合は、TPC機能を使用できます。 次の出力は、sysbenchテーブルのスキーマを示しています。

      テーブル "public.sbtest1"
       列 | タイプ | 照合順序 | Nullable | デフォルト | ストレージ | 圧縮 | 統計ターゲット | 説明
      -------- ---------------- ------------------- ------------------------------------- ---------------------------------------------------------------------
       id | integer | | not null | nextval('sbtest1_id_seq '::regclass) | plain | | | 
       k | integer | | nullではない | 0 | plain | | 
       c | 文字 (120) | | nullではない | ''::bpchar | 拡張 | | | 
       pad | character(60) | | nullではない | ''::bpchar | 拡張 | | |
      インデックス:
          "sbtest1_pkey" PRIMARY KEY、btree (id) 、テーブルスペース "rds_compress"
          "k_1" btree (k) 、テーブルスペース "rds_compress"
      テーブルスペース: "rds_compress"
      アクセス方法: ヒープ 
  • データが圧縮されているかどうかを確認します。

    pg_database_sizepg_tablespace_sizepg_relation_sizepg_table_sizepg_index_sizepg_total_relation_sizeなどの関数を使用して、データのサイズをリアルタイムで表示できます。

    説明

    sysbenchを使用して、同じ量のテストデータを圧縮テーブルと非圧縮テーブルに別々に挿入し、テーブルのディスク使用状況を確認できます。 圧縮テーブルのディスク使用量は、非圧縮テーブルのディスク使用量の約50% です。

  • テーブルの圧縮率を計算します。

    SELECT pg_relation_size('<tablename>')::float / (relpages * 8192) from pg_class WHERE relname = '<tablename>';
    説明

    上記のステートメントでは、pg_relation_size('<tablename>') 関数を呼び出して、pg_classシステムディレクトリからテーブルのディスク使用量をバイト単位で照会し、取得した値を浮動小数点数に変換します。 次に、浮動小数点数を (relpages × 8192) の値で除算して、各ページのバイト単位の平均サイズを得る。 relpagesは、テーブル内の総ページ数を指定します。 8192はPostgreSQLのデフォルトのページサイズで、ほとんどの場合8 KBです。 クエリの結果は、テーブルの平均圧縮率を示します。 小さい値は、高い圧縮率を示す。

テーブルまたはインデックスのTPC機能を無効にする

テーブルまたはインデックスにTPC機能を使用しない場合は、次のステートメントを実行して、テーブルまたはインデックスのTPC機能を無効にします。

ALTER TABLE <tablename> SET TABLESPACE pg_default;
ALTER INDEX <indexname> SET TABLESPACE pg_default; 

FAQ

RDSインスタンスのTPC機能を有効にした後、pg_dumpとpg_basebackupは期待どおりに実行されますか?

はい、pg_dumpとpg_basebackupは期待どおりに実行されます。 pg_basebackupを使用して生成されたバックアップデータを別のRDSインスタンスに復元する場合は、ターゲットRDSインスタンスのTPC機能を有効にする必要があります。