このトピックでは、sysbenchを使用して、PolarDB for PostgreSQL 14クラスターのオンライントランザクション処理 (OLTP) パフォーマンスをテストする方法について説明します。 このトピックの手順に基づいてテストを実行し、クラスターのパフォーマンスに関する洞察を得ることができます。
テストツール
Sysbenchは、コア指標に基づいて負荷の高いデータベースシステムのパフォーマンスを評価するために使用できる、モジュール式、クロスプラットフォーム、およびマルチスレッドのベンチマークツールです。 Sysbenchを使用すると、複雑なベンチマーク設定なしでデータベースのパフォーマンスをすばやくテストできます。
テスト環境
テストで使用されるElastic Compute Service (ECS) インスタンスとPolarDB for PostgreSQLクラスターは、同じリージョンとゾーンにデプロイされます。
ECSインスタンスとPolarDB for PostgreSQLクラスターのネットワークタイプはVirtual Private Cloud (VPC) です。
説明ECSインスタンスとPolarDB for PostgreSQLクラスターは同じVPCで実行されます。
テストで使用されたPolarDB for PostgreSQLクラスターに関する情報を次に示します。
クラスターには、1つのプライマリノード、1つの読み取り専用ノード、および1つのスタンバイノードがあります。
クラスターのプライマリエンドポイントは、クラスターへの接続に使用されます。 PolarDB For PostgreSQLクラスターのエンドポイントを表示する方法の詳細については、「エンドポイントの表示または適用」をご参照ください。
テストで使用されたECSインスタンスに関する情報:
インスタンスタイプは ecs.c5.4xlarge です。
インスタンスは、64ビットCentOS 7.6オペレーティングシステムを実行します。
テストシナリオ
読み取り、書き込み、および読み取り /書き込みのシナリオで、PolarDB for PostgreSQL 14クラスターのOLTPパフォーマンスをテストします。 クラスターには、1つのプライマリノード、1つの読み取り専用ノード、および1つのスタンバイノードがあります。
メトリクス
1秒あたりのトランザクション (TPS): データベースで1秒あたりに実行されるトランザクションの数。 コミットされたトランザクションのみがカウントされます。
sysbenchのインストール
クイックインストール方法:
Debian/Ubuntu
sudo apt -y install sysbenchRHEL/CentOS
sudo yum -y install sysbench
ソースコードベースのインストール方法:
次の例では、sysbenchがRHELまたはCentOSシステムにインストールされています。 root権限を使用してsysbenchをインストールする必要があります。
## Install related dependencies.
yum -y install make automake libtool pkgconfig libaio-devel git
## Install related dependencies.
yum -y install mariadb-devel openssl-devel
## Install PostgreSQL dependencies.
yum -y install postgresql-devel
## Download sysbench from GitHub.
git clone https://github.com/akopytov/sysbench.git
## Access the sysbench directory.
cd sysbench
## Run autogen.sh.
./autogen.sh
## Configure the build process and add support for PostgreSQL.
./configure --with-pgsql
## Make.
make -j
## Install.
make install次のシェルコマンドを実行して、インストールを確認します。 返された結果にpgsqlオプションが含まれている場合、インストールは成功です。
sysbench --help返されたpgsqlオプションのサンプル:
以前のバージョンのsysbenchでは、-- pgsql-sslmodeオプションがpgsqlオプションに含まれていない場合があります。
pgsql options:
--pgsql-host=STRING PostgreSQL server host [localhost]
--pgsql-port=N PostgreSQL server port [5432]
--pgsql-user=STRING PostgreSQL user [sbtest]
--pgsql-password=STRING PostgreSQL password []
--pgsql-db=STRING PostgreSQL database name [sbtest]
--pgsql-sslmode=STRING PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full) [prefer]バイナリインストールコマンドの詳細については、「sysbenchのドキュメント」をご参照ください。
テストの実行手順
テスト環境の準備
ECSインスタンスのIPアドレスをPolarDBクラスターのホワイトリストに追加します。 詳細については、「クラスターのホワイトリストの設定」をご参照ください。
データベースアカウントを作成します。 詳細については、「データベースアカウントの作成」をご参照ください。特権アカウントを作成することを推奨します。
PolarDBコンソールで
testdbという名前のデータベースを作成し、前の手順で作成したデータベースアカウントをデータベース所有者として使用します。 詳細については、「データベースの作成」をご参照ください。クラスターのプライマリエンドポイントを取得します。 詳細については、「エンドポイントの表示または申請」をご参照ください。
sysbenchを使用して、PolarDB for PostgreSQLクラスターのOLTPパフォーマンスをテストします。
下表に、各パラメーターを説明します。
説明パラメーター値を、テストで使用されるクラスターのエンドポイントとポートに置き換えます。
パラメーター
説明
-- pgsql-user
PolarDB for PostgreSQLクラスターへのログインに使用されるデータベースアカウント。
-- pgsql-パスワード
PolarDB for PostgreSQLクラスターへのログインに使用されるデータベースアカウントのパスワード。
-- pgsql-host
PolarDB for PostgreSQLクラスターのプライマリエンドポイント。
-- pgsqlポート
PolarDB for PostgreSQLクラスターのプライマリエンドポイントに関連付けられているポート。
クイックテスト
この例では、8つのテストテーブルがデータベースにインポートされます。 各テーブルは250,000行のデータを含む。 データベースの推定合計サイズは1 GBです。
テストは256の同時スレッドで実行されます。 各シナリオのテスト期間は5分です。
データを準備します。
## Clean up data. sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert cleanup ## Import data. sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_insert prepareさまざまなシナリオでデータベースのOLTPパフォーマンスをテストします。
読み取りと書き込みが混在するシナリオでデータベースのOLTPパフォーマンスをテストします。
## Run the oltp_read_write test. sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_write run書き込みシナリオでデータベースのOLTPパフォーマンスをテストします。 次のセクションでは、それぞれ5分間の3つの書き込みシナリオについて説明します。
oltp_update_indexテストを実行します。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_index runoltp_update_non_indexテストを実行します。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_update_non_index runoltp_write_onlyテストを実行します。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_write_only run
読み取りシナリオでデータベースのOLTPパフォーマンスをテストします。 次のセクションでは、それぞれ5分の読み取りシナリオについて説明します。
oltp_point_selectテストを実行します。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_point_select runoltp_read_onlyテストを実行します。
sysbench --pgsql-user=XXX --pgsql-password=XXX --pgsql-host=XXX --pgsql-port=XXX --report-interval='1' --tables='8' --db-driver='pgsql' --events='0' --histogram='on' --percentile='95' --threads='256' --table-size='500000' --time='300' --rand-type='uniform' --pgsql-db=testdb oltp_read_only run
テストは256の同時スレッドで実行されます。 接続作成失敗のエラーメッセージが表示された場合は、ノード仕様でサポートされている最大接続数に基づいてthreadsパラメーターの値を調整できます。次のいずれかの方法を使用して、クラスターへの最大接続数を確認できます。
PolarDBコンソールで最大接続数を表示します。
PolarDBコンソールにログインします。 左側のナビゲーションウィンドウから [クラスター] をクリックします。 左上隅のリージョンを選択し、管理するクラスターのIDをクリックして、[基本情報] ページに移動します。
[基本情報] ページの [データベースノード] セクションで、セクションの右上隅にあるアイコンをクリックして、ビューを切り替えます。 次に、[デフォルトの最大接続数] 列を表示できます。
次のステートメントを実行して、最大接続数を照会します。
SHOW max_connections;
IOBoundおよびCPUBoundテスト
IOBoundテスト: I/O集約型のシナリオでデータベースのOLTPパフォーマンスをテストします。
CPUBoundテスト: CPU負荷の高いシナリオでデータベースのOLTPパフォーマンスをテストします。
次の表は、8つのCPUコアと64 GBのメモリを備えたPolarDBクラスターのパフォーマンスをテストするために使用されるテストデータの量を示しています。
ほとんどの場合、IOBoundテストには、
バッファプールの2倍のサイズのテストデータが必要です。 次の表の説明に従って、関連するsysbenchパラメーターを変更します。 その他のパラメーターをクイックテストのテストシナリオで使用する値に設定します。Sysbenchパラメーター
説明
値
-- テーブル
テーブルの数。
8
-- テーブルサイズ
行の数。
64000000
ほとんどの場合、CPUBoundテストでは、
バッファプールの半分のサイズのテストデータが必要です。 次の表の説明に従って、関連するsysbenchパラメーターを変更します。 その他のパラメーターを、クイックテストのテストシナリオで使用する値に設定します。Sysbenchパラメーター
説明
値
-- テーブル
テーブルの数。
8
-- テーブルサイズ
行の数。
12000000
関連ドキュメント
PolarDB For PostgreSQLと類似のクラウドネイティブPostgreSQL 14データベースのパフォーマンス比較の詳細については、「類似のPostgreSQLクラウドネイティブデータベースとのパフォーマンス比較」をご参照ください。
PolarDB For PostgreSQLとオープンソースPostgreSQL 14データベースのパフォーマンス比較の詳細については、「オープンソースPostgreSQLとのパフォーマンス比較」をご参照ください。