PostgreSQLにはpgbenchというベンチマークツールが備わっています。文字通りベンチマークに使用する事もできますし、バックアップやレプリケーションの練習用テストデータ生成にも使用する事ができます。
- PostgreSQL インストール
- PostgreSQL データベースの作成
- PostgreSQL contribモジュールの使い方
- PostgreSQL パラメタの設定方法
- PostgreSQL ベンチマークツールの紹介 (いまここ)
- PostgreSQL WAL(Write Ahead Log)の基本説明
- PostgreSQL バックアップとリストア
- PostgreSQL PITR(Point In Time Recovery)基本概念の説明
- PostgreSQL PITR(Point In Time Recovery)操作方法の説明
- PostgreSQL PITR(Point In Time Recovery)タイムライン操作
- PostgreSQL ストリーミングレプリケーションの最小構成
- PostgreSQL ストリーミングレプリケーションのパラメタ説明
- PostgreSQL ストリーミングレプリケーションの障害復旧
- PostgreSQL ストリーミングレプリケーションの多段構成
- PostgreSQL ストリーミングレプリケーションのDR向け設定
- PostgreSQL ストリーミングレプリケーションのコンフリクト
- PostgreSQL 自動バキューム(AUTO VACUUM)
- PostgreSQL HOT(Heap Only Tuple)
- PostgreSQL インデックスのメンテナンス
- PostgreSQL 統計情報の更新
- PostgreSQL 実行計画
- PostgreSQL スロークエリの調査方法
テストデータベースの作成
デフォルト設定のテストデータベース
ベンチマークテスト用のデータベースを作成します。以下のコマンドは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は排他的である事に注意。 |