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

PolarDB:パフォーマンスホワイトペーパー

最終更新日:Aug 28, 2026

PostgreSQL には、PolarDB for PostgreSQL (Compatible with Oracle) でベンチマークテストを実行するための軽量ストレステストツールである pgbench が含まれています。このツールは、同時データベースセッションで同じ SQL コマンドを繰り返し実行します。このトピックでは、pgbench を使用して PolarDB for PostgreSQL (Compatible with Oracle) クラスターの最大パフォーマンスをテストする方法について説明します。

テスト環境

  • すべてのテストは中国 (青島) リージョンで実施されました。PolarDB クラスターと ECS インスタンスは同じゾーンに配置されています。
  • ECS インスタンスタイプ: ecs.g5.16xlarge (64 コア 256 GB)。
  • ECS ストレージ仕様: 200 GB SSD ローカルディスク。
  • ネットワークタイプ: Virtual Private Cloud (VPC)。PolarDB クラスターと ECS インスタンスは同じ VPC 内にあります。
  • オペレーティングシステム: CentOS 7.6 x64。
  • PolarDB クラスターノード: 1 つのプライマリノードと 1 つの読み取り専用ノード。
説明 CentOS 6 は PostgreSQL 11 をサポートしていません。

テスト項目

  • 読み取り専用秒間クエリ数 (QPS)

    1 秒あたりに実行される読み取り専用 SQL ステートメント (SELECT のみ) の数。

  • 読み取り/書き込み QPS

    1 秒あたりに実行される読み取り/書き込み SQL ステートメント (INSERT、SELECT、UPDATE) の数。

準備

  • テストツールのインストール
    次のコマンドを実行して、ECS インスタンスに PostgreSQL 11 をインストールします。
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    sudo yum install -y postgresql11
  • クラスターパラメーターの変更
    PolarDB クラスターは次のように変更する必要があります:
    log_statement = 'none'
    enable_hashjoin=off
    enable_mergejoin=off
    enable_bitmapscan=off
    説明 現在、コンソールで変更できるのは log_statement パラメーターのみです。クラスターパラメーターの設定方法の詳細については、「クラスターパラメーターの設定」をご参照ください。

    設定パラメーターを変更した後、クラスターを再起動して変更を有効にします。

テスト方法

  1. 次のコマンドを実行して環境変数を設定します:
    export PGHOST=<Private endpoint of the PolarDB cluster>
    export PGPORT=<Private port of the PolarDB cluster>
    export PGDATABASE=postgres
    export PGUSER=<Username for the PolarDB database>
    export PGPASSWORD=<Password for the PolarDB user>
    説明 PolarDB for PostgreSQL (Compatible with Oracle) クラスターのエンドポイントの表示方法の詳細については、「エンドポイントとポートの表示」をご参照ください。
  2. ターゲットデータベースのサイズに基づいてテストデータを初期化します。コマンドは次のとおりです:
    • 10 億件のデータを初期化:
      /usr/pgsql-11/bin/pgbench -i -s 10000
    • 5 億件のデータを初期化:
      /usr/pgsql-11/bin/pgbench -i -s 5000
    • 1 億件のデータを初期化:
      /usr/pgsql-11/bin/pgbench -i -s 1000
  3. 読み取り専用および読み取り/書き込みテストスクリプトを作成します。
    • 読み取り専用スクリプト ro.sql を作成します:
      1. vim ro.sql コマンドを実行します。
      2. I キーを押して編集モードに入ります。
      3. 次の内容を入力します:
        \set aid random_gaussian(1, :range, 10.0)
        SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
      4. Esc キーを押して編集モードを終了し、:wq と入力して保存し、終了します。
    • 読み取り/書き込みスクリプト rw.sql を作成します:
      1. vim rw.sql コマンドを実行します。
      2. I キーを押して編集モードに入ります。
      3. 次の内容を入力します:
        \set aid random_gaussian(1, :range, 10.0)
        \set bid random(1, 1 * :scale)
        \set tid random(1, 10 * :scale)
        \set delta random(-5000, 5000)
        BEGIN;
        UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
        SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
        UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
        UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
        INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
        END;
      4. Esc キーを押して編集モードを終了し、:wq と入力して保存し、終了します。
  4. 次のコマンドを実行してテストを実施します:
    • 読み取り専用テスト:
      88-core 710 GB (polar.o.x8.12xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000
      
      64-core 512 GB (polar.o.x8.8xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 256 -j 128 -T 120 -D scale=10000 -D range=1000000000
      
      32-core 256 GB (polar.o.x8.4xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000
      
      16-core 128 GB (polar.o.x8.2xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000
      
      8-core 64 GB (polar.o.x8.xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000
      
      8-core 32 GB (polar.o.x4.xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 64 -j 32 -T 120 -D scale=10000 -D range=1000000000
      
      4-core 16 GB (polar.o.x4.large)
      Total data volume: 500 million, Hot data: 50 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=50000000
      Total data volume: 500 million, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 32 -j 32 -T 120 -D scale=5000 -D range=100000000
      
      2-core 4 GB (polar.o.x4.medium)
      Total data volume: 100 million, Hot data: 50 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=50000000
      Total data volume: 100 million, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./ro.sql -c 16 -j 32 -T 120 -D scale=1000 -D range=100000000
    • 読み取り/書き込みテスト:
      88-core 710 GB (polar.o.x8.12xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000
      
      64-core 512 GB (polar.o.x8.8xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 256 -j 256 -T 120 -D scale=10000 -D range=1000000000
      
      32-core 256 GB (polar.o.x8.4xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 128 -j 128 -T 120 -D scale=10000 -D range=1000000000
      
      16-core 128 GB (polar.o.x8.2xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000
      
      8-core 64 GB (polar.o.x8.xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 64 -j 64 -T 120 -D scale=10000 -D range=1000000000
      
      8-core 32 GB (polar.o.x4.xlarge)
      Total data volume: 1 billion, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=100000000
      Total data volume: 1 billion, Hot data: 500 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=500000000
      Total data volume: 1 billion, Hot data: 1 billion
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 32 -j 32 -T 120 -D scale=10000 -D range=1000000000
      
      4-core 16 GB (polar.o.x4.large)
      Total data volume: 500 million, Hot data: 50 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=50000000
      Total data volume: 500 million, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 16 -j 16 -T 120 -D scale=5000 -D range=100000000
      
      2-core 8 GB (polar.o.x4.medium)
      Total data volume: 100 million, Hot data: 50 million
      /usr/pgsql-11/bin/pgbench -M prepared -v -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=50000000
      Total data volume: 100 million, Hot data: 100 million
      /usr/pgsql-11/bin/pgbench -M prepared -n -r -P 1 -f ./rw.sql -c 8 -j 8 -T 120 -D scale=1000 -D range=100000000
    説明
    • scale: この値に 100,000 を掛けると、テストデータ量になります。
    • range: アクティブなデータ量。
    • -c: 同時テスト接続数。この値は、インスタンスタイプの最大接続数を表すものではありません。最大接続数の詳細については、「コンピュートノードの仕様」をご参照ください。

テスト結果

仕様テストデータ量ホット (アクティブ) データ量読み取り専用 QPS読み取り/書き込み QPS

polar.o.x8.12xlarge

88 コア 710 GB

10 億1 億630650.40263746.37
5 億601262.24247352.76
10 億589405.79218788.92

polar.o.x8.8xlarge

64 コア 512 GB

10 億1 億592064.65227352.23
5 億554777.11213343.13
10 億508404.07203331.35

polar.o.x8.4xlarge

32 コア 256 GB

10 億1 億522182.92213212.34
5 億509372.85203322.34
10 億489349.72198531.37

polar.o.x8.2xlarge

16 コア 128 GB

10 億1 億263893.72152863.27
5 億250221.62129238.26
10 億239832.62106212.82

polar.o.x8.xlarge

8 コア 64 GB

10 億1 億142836.5669725.29
5 億133931.6955927.65
10 億124151.0250786.21

polar.o.x4.xlarge

8 コア 32 GB

10 億1 億126748.0759738.33
5 億113432.3248372.25
10 億104232.8449763.64

polar.o.x4.large

4 コア 16 GB

5 億5,000 万76238.8947388.27
1 億69892.8343638.85

polar.o.x4.medium

2 コア 8 GB

1 億5,000 万28320.7018152.63
1 億30792.1919111.15
説明
  • 仕様: PolarDB for PostgreSQL (Compatible with Oracle) のインスタンスタイプコード。
  • テストデータ量: このテストラウンドのレコード数。
  • ホット (アクティブ) データ量: このテストラウンドでクエリおよび UPDATE SQL ステートメントによって使用されるレコード数。
  • 読み取り専用 QPS: 1 秒あたりに実行される読み取り専用クエリの数。
  • 読み取り/書き込み QPS: 1 秒あたりに実行される読み取り/書き込みクエリの数。
2c8g4c16g8c32g8c64g16c128g32c256g64c512g88c710g