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

PolarDB:PolarDB for PostgreSQL 11

最終更新日:Jun 21, 2024

PostgreSQL (Oracleと互換) は、軽量のストレステストツールであるpgbenchを提供します。 pgbenchはPostgreSQLでベンチマークテストを実行できます。 ベンチマークテストは、複数の同時データベースセッションで同じ一連のSQLコマンドを繰り返し実行することによって実行されます。 このトピックでは、pgbenchを使用してPolarDB for PostgreSQLクラスターのピークパフォーマンスをテストする方法について説明します。

テスト環境

  • すべてのテストは中国 (チンタオ) の地域で行なわれなければなりません。 PolarDBクラスターは、ECSインスタンスと同じゾーンにある必要があります。
  • ECSインスタンスタイプ: ecs.g5.16xlarge (64 vCPU、256 GiB)
  • ECSストレージ: 200 GiBローカルSSD
  • ネットワークタイプ: 仮想プライベートクラウド (VPC) 。 PolarDBクラスターとECSインスタンスは同じVPCにあります。
  • OS: CentOS 7.6の64ビットバージョン
  • PolarDBクラスター内のノード数: 1つのプライマリノードと1つの読み取り専用ノード
説明 CentOS 6 は PostgreSQL 11 をサポートしていません。

テストメトリック

  • 1 秒あたりの読み取り専用クエリ (QPS)

    読み取り専用操作がデータベース上で実行されたときの、1 秒あたりの SELECT 文の実行数

  • 読み書き QPS

    データベースで読み取り /書き込み操作が実行されたときに1秒あたりに実行されるSELECT、INSERT、およびUPDATEステートメントの数。

始める前に

  • PostgreSQL 11 をインストールします。
    次のコマンドを実行して、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クラスターのパラメーターを設定します。
    PolarDBクラスターで、次のパラメーターを設定します。
    log_statement = 'none'
    enable_hashjoin=off
    enable_mergejoin=off
    enable_bitmapscan=off 
    説明 PolarDBコンソールでは、log_statementパラメーターのみを設定できます。 クラスターパラメーターの設定方法の詳細については、「クラスターパラメーターの指定」「」をご参照ください。

    パラメーターを設定した後、設定を有効にするためにPolarDBクラスターを再起動します。

テスト方法

  1. 次のコマンドを実行して環境変数を設定します。
    export PGHOST=<PolarDBクラスターの内部エンドポイント>
    export PGPORT=<PolarDBクラスターの内部ポート番号>
    export PGDATABASE=postgres
    export PGUSER=<PolarDBにログオンするユーザー名>
    export PGPASSWORD=<PolarDBアカウントのパスワード> 
    説明 PolarDB For PostgreSQLクラスターのエンドポイントを表示する方法の詳細については、「エンドポイントの表示または適用」をご参照ください。
  2. テスト対象のデータベースのデータサイズに基づいてテストデータを初期化します。
    • 10億個のデータレコードを初期化するには:
      /usr/pgsql-11/bin/pgbench -i -s 10000
    • 500万件のデータレコードを初期化するには:
      /usr/pgsql-11/bin/pgbench -i -s 5000
    • 100万件のデータレコードを初期化するには:
      /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)
        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入札ランダム (1, 1 *: スケール)
        \set tidランダム (1, 10 *: スケール)
        \デルタランダムに設定 (-5000、5000)
        開始;
        UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
        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;
        Ingbench_history (tid, bid, aid, delta, mtime) 値 (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); に挿入する
        エンド; 
      4. Escキーを押して編集モードを終了し、:wqと入力してファイルを保存し、エディターを終了します。
  4. 次のコマンドを実行して、操作をテストします。
    • 次のコマンドを実行して、読み取り専用操作をテストします。
      88C 710 GB(polar.pg.x8.12xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 256 -j 128 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 256 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 256 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      64C 512 GB(polar.pg.x8.8xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 256 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 256 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      32C 256 GB(polar.pg.x8.4xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      16C 128 GB(polar.pg.x8.2xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      8C 64 GB(polar.pg.x8.xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      8C 32 GB(polar.pg.x4.xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 64 -j 32 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      4C 16 GB(polar.pg.x4.large)
      総データ量: 500万件、ホットデータ: 50万件
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 16 -j 16 -T 120 -Dスケール=5000 -D範囲=50000000
      総データ量: 500万件、ホットデータ: 100万件
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 16 -j 16 -T 120 -Dスケール=5000 -D範囲=100000000
      
      2C 8 GB(polar.pg.x4.medium)
      総データ量: 100万件、ホットデータ: 50万件
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 16 -j 32 -T 120 -Dスケール=1000 -D範囲=50000000
      総データ量: 100万件、ホットデータ: 100万件
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 16 -j 32 -T 120 -Dスケール=1000 -D範囲=100000000 
    • 次のコマンドを実行して、読み取り /書き込み操作をテストします。
      88C 710 GB(polar.pg.x8.12xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      64C 512 GB(polar.pg.x8.8xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      32C 256 GB(polar.pg.x8.4xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 128 -j 128 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      16C 128 GB(polar.pg.x8.2xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      8C 64 GB(polar.pg.x8.xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 64 -j 64 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      8C 32 GB(polar.pg.x4.xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 32 -j 32 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 32 -j 32 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 32 -j 32 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      4C 16 GB(polar.pg.x4.large)
      総データ量: 500万件、ホットデータ: 50万件
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 16 -j 16 -T 120 -Dスケール=5000 -D範囲=50000000
      総データ量: 500万件、ホットデータ: 100万件
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 16 -j 16 -T 120 -Dスケール=5000 -D範囲=100000000
      
      2C 4 GB(polar.pg.x4.medium)
      総データ量: 100万件、ホットデータ: 50万件
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 8 -j 8 -T 120 -Dスケール=1000 -D範囲=50000000
      総データ量: 100万件、ホットデータ: 100万件
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 8 -j 8 -T 120 -Dスケール=1000 -D範囲=100000000 
    説明
    • scale: scaleに100,000を掛けた値は、テストデータレコードの数を示します。
    • range: ホットデータレコードの数を示します。
    • -c: テストする接続の数を示します。 この数は、このタイプのクラスターがサポートする最大接続数ではありません。 詳細については、「PolarDB For PostgreSQL Enterprise Editionのコンピュートノード仕様」をご参照ください。

テスト結果

仕様コードテストするデータレコードの数ホット (アクティブ) データレコードの数読み取り専用QPSQPSの読み取りと書き込み

polar.pg.x8.12xlarge

88コア、710 GB

10 億1 億628863.87259862.37
500 万612612.86243871.65
10 億607162.83217592.26

polar.pg.x8.8xlarge

64 コア 512 GB

10 億1 億587612.46227352.23
500 万539371.54209782.29
10 億498728.28199821.76

polar.pg.x8.4xlarge

32 コア 256 GB

10 億1 億487138.21237280.67
500 万442339.25215081.79
10 億420348.28198341.34

polar.pg.x8.2xlarge

16 コア 128 GB

10 億1 億269781.83168612.27
500 万249271.32131725.26
10 億233219.96109826.82

polar.pg.x8.xlarge

8 コア 64 GB

10 億1 億148621.3871787.83
500 万130862.8659298.44
10 億123151.9052324.72

polar.pg.x4.xlarge

8 コア 32 GB

10 億1 億137366.9259738.33
500 万114932.6452873.87
10 億109248.2948993.82

polar.pg.x4.large

4 コア 16 GB

500 万5000 万67289.7640221.21
1 億78393.5646281.85

polar.pg.x4.medium

2 コア 8 GB

1 億5000 万26383.9118983.55
1 億27821.4917986.46
説明
  • 仕様コード: PolarDB for PostgreSQL仕様のコード。
  • テストするデータレコードの数: テストのデータレコードの数。
  • ホット (アクティブ) データレコード数: テストでSQLコマンドを照会および更新するためのレコード数。
  • 読み取り専用QPS: 1秒あたりに処理された読み取り専用リクエストの数。
  • 読み書きQPS: 1秒あたりに処理された読み書き要求の数。
4c8g4c16g8c32g8c64g16c128g32c256g64c512g88c710g