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

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

最終更新日:May 23, 2024

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

テスト環境

  • すべてのテストは中国 (チンタオ) の地域で行なわれなければなりません。 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アカウントのパスワード> 
    説明 クラスターのエンドポイントを表示する方法の詳細については、「エンドポイントとポートの表示」をご参照ください。
  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.o.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.o.x8.8xlarge)
      総データ量: 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
      
      32C 256 GB(polar.o.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
      
      16cC 128 GB(polar.o.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.o.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.o.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.o.x4.large)
      総データ量: 500万件、ホットデータ: 50万件
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/ro.sql -c 32 -j 32 -T 120 -Dスケール=5000 -D範囲=50000000
      総データ量: 500万件、ホットデータ: 100万件
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/ro.sql -c 32 -j 32 -T 120 -Dスケール=5000 -D範囲=100000000
      
      2C 4 GB(polar.o.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.o.x8.12xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      64C 512 GB(polar.o.x8.8xlarge)
      総データ量: 10億レコード、ホットデータ: 100万レコード
      /usr/pgsql-11/bin/pgbench − M調製した − v − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=100000000
      総データ量: 10億レコード、ホットデータ: 500万レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=500000000
      総データ量: 10億レコード、ホットデータ: 10億レコード
      /usr/pgsql-11/bin/pgbench − M調製 − n − r − P1 − f。/rw.sql -c 256 -j 256 -T 120 -Dスケール=10000 -D範囲=1000000000
      
      32C 256 GB(polar.o.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.o.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.o.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.o.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.o.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 8 GB(polar.o.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: テストの接続数を指定します。 このパラメーターの値は、このタイプのクラスターでサポートされる最大接続数を示していません。 詳細については、「計算ノードの仕様」をご参照ください。

テスト結果

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

polar.o.x8.12xlarge

88コア、710 GB

10 億1 億630650.40263746.37
500 万601262.24247352.76
10 億589405.79218788.92

polar.o.x8.8xlarge

64 コア 512 GB

10 億1 億592064.65227352.23
500 万554777.11213343.13
10 億508404.07203331.35

polar.o.x8.4xlarge

32 コア 256 GB

10 億1 億522182.92213212.34
500 万509372.85203322.34
10 億489349.72198531.37

polar.o.x8.2xlarge

16 コア 128 GB

10 億1 億263893.72152863.27
500 万250221.62129238.26
10 億239832.62106212.82

polar.o.x8.xlarge

8 コア 64 GB

10 億1 億142836.5669725.29
500 万133931.6955927.65
10 億124151.0250786.21

polar.o.x4.xlarge

8 コア 32 GB

10 億1 億126748.0759738.33
500 万113432.3248372.25
10 億104232.8449763.64

polar.o.x4.large

4 コア 16 GB

500 万5000 万76238.8947388.27
1 億69892.8343638.85

polar.o.x4.medium

2 コア 8 GB

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