PostgreSQL 13のベンチマークツールの紹介

スポンサーリンク

PostgreSQLにはpgbenchというベンチマークツールが備わっています。文字通りベンチマークに使用する事もできますし、バックアップやレプリケーションの練習用テストデータ生成にも使用する事ができます。

テストデータベースの作成

デフォルト設定のテストデータベース

ベンチマークテスト用のデータベースを作成します。以下のコマンドはbenchという名前のテストデータベースを作成する操作例です。

createdb bench

pgbenchに-i引数を与えると、テスト用データベースにテスト用のテーブルが作成されます。以下のコマンドを実行すると、benchデータベースにpgbench_branches, pgbench_tellers, pgbench_accounts, pgbench_historyの4テーブルが作成されます。

/usr/pgsql-13/bin/pgbench -i bench

pgbench_branches, pgbench_tellers, pgbench_accounts, pgbench_historyの4テーブルが作成された事を確認します。

[postgres@centos10 ~]$ psql bench 
psql (13.1)
Type "help" for help.

bench=# \dt+
                                 List of relations
 Schema |       Name       | Type  |  Owner   | Persistence |  Size   | Description 
--------+------------------+-------+----------+-------------+---------+-------------
 public | pgbench_accounts | table | postgres | permanent   | 13 MB   | 
 public | pgbench_branches | table | postgres | permanent   | 40 kB   | 
 public | pgbench_history  | table | postgres | permanent   | 0 bytes | 
 public | pgbench_tellers  | table | postgres | permanent   | 40 kB   | 
(4 rows)

bench=# 

テストデータベースのチューニング

テストデータベースを作成するときは、以下のようなオプションを指定したチューニングが可能です。

pgbench -i <option...> <dbname>

データベース作成時に与える事ができるオプションの一部を紹介します。詳細はman pgbenchでも調べる事が出来ます。

引数 説明
-F FILLFACTOR(直訳すると「充填率」)をパーセンテージで指定する。FILLFACTORはデータベースブロック内にどの程度を充填させるかの指定で、更新頻度が高い場合はFILLFACTORを明示指定し、ある程度の空きを確保した方が性能向上につながる。省略した場合はFILLFACTORが100となる(100%充填され空きがない状態)。
-s pgbench_accountsテーブルにデフォルトの何倍のレコードを登録するかを指定する。デフォルトでは10,000,000行が生成されるが、-s 100とすればデフォルトの100倍である1,000,000,000行が生成される

ベンチマークの実行

ベンチマークを実行する時の構文は以下の通り。

pgbench <options...> dbname

例えば、5ユーザ同時に接続し、各ユーザが100000トランザクションを実行する操作例は以下の通り。

/usr/pgsql-13/bin/pgbench -c 5 -t 100000 bench

1つのトランザクションで、以下7コマンドが実行される。

BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM 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;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;

ベンチマーク時に与える事ができるオプションの一部を紹介します。詳細はman pgbenchでも調べる事が出来ます。

引数 説明
-c 同時接続クライアント数
-C 各クライアントが一度だけ接続するのではなく新たな接続を確立。接続によるオーバーヘッドを計測したい時に有効。
-f 自作のトランザクションを使用したい時に使用。引数にトランザクションを記述したファイルを指定。
-j pgbenchのワーカースレッド数。デフォルトは1
-t 実行するトランザクション数
-T 実行時間。-tと-Tは排他的である事に注意。
タイトルとURLをコピーしました