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クラスターを再起動します。
テスト方法
- 次のコマンドを実行して環境変数を設定します。
export PGHOST=<PolarDBクラスターの内部エンドポイント> export PGPORT=<PolarDBクラスターの内部ポート番号> export PGDATABASE=postgres export PGUSER=<PolarDBにログオンするユーザー名> export PGPASSWORD=<PolarDBアカウントのパスワード>説明 PolarDB For PostgreSQLクラスターのエンドポイントを表示する方法の詳細については、「エンドポイントの表示または適用」をご参照ください。 - テスト対象のデータベースのデータサイズに基づいてテストデータを初期化します。
- 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
- 10億個のデータレコードを初期化するには:
- 読み取り専用操作および読み取り /書き込み操作用のテストスクリプトを作成します。
- 読み取り専用操作をテストするスクリプトを作成します。 このスクリプトにro.sqlという名前を付けます。
vim ro.sqlコマンドを実行します。- Iキーを押して編集モードに入ります。
- エディタで、次のスクリプトを指定します:
\set aid random_gaussian(1, :range, 10.0) pgbench_accounts WHERE aid = :aid; - Escキーを押して編集モードを終了し、
:wqと入力してファイルを保存し、エディターを終了します。
- 読み取り /書き込み操作をテストするスクリプトを作成します。 このスクリプトにrw.sqlという名前を付けます。
vim rw.sqlコマンドを実行します。- Iキーを押して編集モードに入ります。
- エディタで、次のスクリプトを指定します:
\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); に挿入する エンド; - Escキーを押して編集モードを終了し、
:wqと入力してファイルを保存し、エディターを終了します。
- 読み取り専用操作をテストするスクリプトを作成します。 このスクリプトにro.sqlという名前を付けます。
- 次のコマンドを実行して、操作をテストします。
- 次のコマンドを実行して、読み取り専用操作をテストします。
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のコンピュートノード仕様」をご参照ください。
- 次のコマンドを実行して、読み取り専用操作をテストします。
テスト結果
| 仕様コード | テストするデータレコードの数 | ホット (アクティブ) データレコードの数 | 読み取り専用QPS | QPSの読み取りと書き込み |
polar.pg.x8.12xlarge 88コア、710 GB | 10 億 | 1 億 | 628863.87 | 259862.37 |
| 500 万 | 612612.86 | 243871.65 | ||
| 10 億 | 607162.83 | 217592.26 | ||
polar.pg.x8.8xlarge 64 コア 512 GB | 10 億 | 1 億 | 587612.46 | 227352.23 |
| 500 万 | 539371.54 | 209782.29 | ||
| 10 億 | 498728.28 | 199821.76 | ||
polar.pg.x8.4xlarge 32 コア 256 GB | 10 億 | 1 億 | 487138.21 | 237280.67 |
| 500 万 | 442339.25 | 215081.79 | ||
| 10 億 | 420348.28 | 198341.34 | ||
polar.pg.x8.2xlarge 16 コア 128 GB | 10 億 | 1 億 | 269781.83 | 168612.27 |
| 500 万 | 249271.32 | 131725.26 | ||
| 10 億 | 233219.96 | 109826.82 | ||
polar.pg.x8.xlarge 8 コア 64 GB | 10 億 | 1 億 | 148621.38 | 71787.83 |
| 500 万 | 130862.86 | 59298.44 | ||
| 10 億 | 123151.90 | 52324.72 | ||
polar.pg.x4.xlarge 8 コア 32 GB | 10 億 | 1 億 | 137366.92 | 59738.33 |
| 500 万 | 114932.64 | 52873.87 | ||
| 10 億 | 109248.29 | 48993.82 | ||
polar.pg.x4.large 4 コア 16 GB | 500 万 | 5000 万 | 67289.76 | 40221.21 |
| 1 億 | 78393.56 | 46281.85 | ||
polar.pg.x4.medium 2 コア 8 GB | 1 億 | 5000 万 | 26383.91 | 18983.55 |
| 1 億 | 27821.49 | 17986.46 |
説明
- 仕様コード: PolarDB for PostgreSQL仕様のコード。
- テストするデータレコードの数: テストのデータレコードの数。
- ホット (アクティブ) データレコード数: テストでSQLコマンドを照会および更新するためのレコード数。
- 読み取り専用QPS: 1秒あたりに処理された読み取り専用リクエストの数。
- 読み書きQPS: 1秒あたりに処理された読み書き要求の数。







