pgbench によるクライアント負荷のシミュレーション
コネクションプーリングの動作を観察するために、PostgreSQL に含まれる標準的なベンチマークツールである pgbench を使用します。pgbench は、複数のクライアントが同時にデータベースにアクセスするのをシミュレートできます。
まず、pgbench 環境を初期化する必要があります。これにより、いくつかのテーブルが作成され、サンプルデータが投入されます。以下のコマンドを実行し、PgBouncer ポート(6432)経由で接続していることを確認してください。
pgbench -i -h 127.0.0.1 -p 6432 -U postgres postgres
パスワード(labex_password)の入力を求められます。-i フラグは、データベースをベンチマーク用に初期化します。テーブルが作成され、データが投入されたことを示す出力が表示されるはずです。
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.01 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.13 s (drop tables 0.00 s, create tables 0.00 s, client-side generate 0.06 s, vacuum 0.04 s, primary keys 0.02 s).
次に、負荷をシミュレートするためにベンチマークを実行します。以下のコマンドは、10 の同時クライアント(-c 10)と、各クライアントが 300 のトランザクションを実行する(-t 300)ことをシミュレートします。
pgbench -c 10 -t 300 -h 127.0.0.1 -p 6432 -U postgres postgres
再度、パスワードの入力を求められたら入力してください。ベンチマークは数秒間実行され、トランザクション/秒(tps)を含む結果の概要が表示されます。
pgbench (14.18 (Ubuntu 14.18-0ubuntu0.22.04.1))
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 300
number of transactions actually processed: 3000/3000
latency average = 5.935 ms
initial connection time = 1.342 ms
tps = 1685.027854 (without initial connection time)
このテストにより、PgBouncer を介してかなりのトラフィックが生成されました。これは次のステップで確認します。