最適なパフォーマンスのためのPostgreSQLベンチマーク方法

PostgreSQLの採用が拡大するにつれて、データベース管理者(DBA)や開発者は、さまざまなワークロード下で効率的にアプリケーションを実行するためにそのパフォーマンスを評価する必要があります。パフォーマンスベンチマークは、PostgreSQLがさまざまな負荷をどのように処理するかを測定する重要なプロセスであり、ボトルネックや最適化のための領域を特定するのに役立ちます。この記事では、ツール、メトリクス、およびテストシナリオを探求し、あなたがプロのようにPostgreSQLをベンチマークするのを支援します。

PostgreSQLをベンチマークする理由

ベンチマークを行うことで、以下のことができます:

  1. 特定のワークロード下でデータベースのスループットとレイテンシを測定します。
  2. ハードウェアや構成のボトルネックを特定します。
  3. インデックスの変更やクエリの書き換えなどの最適化の影響を比較します。
  4. 高同時ユーザーアクティビティや大量のデータ書き込みなど、実世界のシナリオをシミュレートします。

追跡すべき主要なメトリクス

PostgreSQLをベンチマークする際には、以下のメトリクスに焦点を当ててください:

  • TPS(1秒間あたりのトランザクション数):データベースが1秒間に完了するトランザクション数を測定します。
  • IOPS(1秒間あたりの入出力操作数):ディスクのアクティビティを追跡します。
  • レイテンシ:クエリの実行にかかる時間を測定し、ユーザーエクスペリエンスに影響を与えます。
  • リソース利用状況:ベンチマーク中のCPU、メモリ、およびディスク使用状況を追跡します。

PostgreSQLベンチマークツール

1. pgbench

pgbenchとは何ですか?

pgbenchはPostgreSQLに組み込まれたベンチマークツールです。複数のクライアントがトランザクションを実行し、データベースのパフォーマンスを計測します。

インストール

PostgreSQLのインストールにバンドルされています。確認するには、次のコマンドを実行してください:

Shell

 

bash
pgbench --version

はじめに

1. ベンチマークデータベースを初期化します:

Shell

 

bash
pgbench -i -s 50 mydb

ここで、-sはデータセットのサイズを決定するスケーリングファクターを設定します。

2. 簡単なベンチマークを実行します:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10:クライアント接続数。
  • -j 2:スレッド数。
  • -T 60:ベンチマークの継続時間(秒)。

サンプル出力:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

Sysbenchを使用する理由

Sysbenchはデータベースやシステム向けの多目的ベンチマークツールです。カスタムワークロードに対して、pgbenchよりも柔軟性を提供します。

インストール

Sysbenchを以下のコマンドを使用してインストールします:

Shell

 

bash
sudo apt-get install sysbench

はじめに

1. ベンチマークを準備します:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. ベンチマークを実行します:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

pg_stat_statementsとは何ですか?

PostgreSQLの拡張機能は、クエリのパフォーマンスと実行統計を追跡します。ワークロードをシミュレートするわけではありませんが、ベンチマーク中に遅いクエリを分析するのに役立ちます。

セットアップ

1. postgresql.confで拡張機能を有効にします:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. 構成をリロードして拡張機能を作成します:

SQL

 

CREATE EXTENSION pg_stat_statements;

使用法

長時間実行されるステートメントを特定するには、次のクエリを実行します:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

ベンチマークシナリオ

以下は、3つのシナリオ(読み取り重視、書き込み重視、およびミックスワークロード)のベンチマーク結果の視覚的表現です。 秒間トランザクション数(TPS)の図は、PostgreSQLが効率的に同時トランザクションを処理する能力を示し、遅延の図はクエリの実行にかかる時間をミリ秒単位で示しています。

PostgreSQLの秒間トランザクション数(TPS)

PostgreSQLクエリ遅延

ワークロードの種類

1. 読み取り重視のワークロード

目的: 高い読み取りアクティビティ下でのデータベースパフォーマンスをテストします。

セットアップ: デフォルトの読み取り専用トランザクションを使用してpgbenchを実行します:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: SELECTクエリのみを実行します。
  • -c 50: 50の同時クライアントをシミュレートします。

2. 書き込み重視のワークロード

目的: 頻繁な挿入または更新によるデータベースパフォーマンスを測定します。

セットアップ: ベンチマークを書き込みを含めるように変更します。

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: 非SELECTクエリを実行します。

3. 読み書き混合のワークロード

目的: 読み込みと書き込みを混在させた実世界のワークロードをシミュレートします。

セットアップ: バランスのとれた構成を使用します:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

ベンチマーク結果を向上させるためのPostgreSQLの最適化

メモリ設定の調整

postgresql.conf内のこれらのパラメータを調整します:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

並列クエリ実行を有効にする

postgresql.conf内のこれらのパラメータを調整します:

Plain Text

 

max_parallel_workers_per_gather = 4

ディスクI/Oの最適化

WALファイルにSSDを使用し、これらの設定を調整します:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

結果の例と解釈

シナリオ: 60秒間、50の並行クライアントが読み込み重視のワークロードを実行します。

出力:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

解釈: このワークロード下でデータベースは1秒あたり2500トランザクションを処理できる能力があります。

期待よりもTPSが低い場合は、パフォーマンスのボトルネックを特定するためにEXPLAIN ANALYZEを使用してクエリプランを分析してください。

結論

PostgreSQLのベンチマークテストは、パフォーマンスの制限を特定し、さまざまなワークロードに最適化する強力な方法です。 pgbenchsysbenchなどのツールを使用し、pg_stat_statementsからの洞察を組み合わせることで、実世界のシナリオをシミュレートし、PostgreSQLの設定を微調整できます。

これらのツールとテクニックを習得することで、PostgreSQLインスタンスが読み取り集中型および書き込み重視のアプリケーションの両方で高いパフォーマンスを提供することができます。

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance