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

PolarDB:sysbenchを使用したOLTPパフォーマンスのテスト

最終更新日:Feb 17, 2025

このトピックでは、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 sysbench
    • RHEL/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のドキュメント」をご参照ください。

テストの実行手順

テスト環境の準備

  1. ECSインスタンスのIPアドレスをPolarDBクラスターのホワイトリストに追加します。 詳細については、「クラスターのホワイトリストの設定」をご参照ください。

  2. データベースアカウントを作成します。 詳細については、「データベースアカウントの作成」をご参照ください。特権アカウントを作成することを推奨します。

  3. PolarDBコンソールでtestdbという名前のデータベースを作成し、前の手順で作成したデータベースアカウントをデータベース所有者として使用します。 詳細については、「データベースの作成」をご参照ください。

  4. クラスターのプライマリエンドポイントを取得します。 詳細については、「エンドポイントの表示または申請」をご参照ください。

  5. 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分です。

  1. データを準備します。

    ## 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
  2. さまざまなシナリオでデータベースの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 run
      • oltp_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 run
      • oltp_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 run
      • oltp_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コンソールで最大接続数を表示します。

    1. PolarDBコンソールにログインします。 左側のナビゲーションウィンドウから [クラスター] をクリックします。 左上隅のリージョンを選択し、管理するクラスターのIDをクリックして、[基本情報] ページに移動します。

    2. [基本情報] ページの [データベースノード] セクションで、セクションの右上隅にあるアイコンをクリックして、ビューを切り替えます。 次に、[デフォルトの最大接続数] 列を表示できます。

  • 次のステートメントを実行して、最大接続数を照会します。

    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

関連ドキュメント