PostgreSQL 9.4.8にcontribパッケージをインストールしてpgbenchを実行する
目次
概要
PostgreSQLをセットアップした後、業務データを投入する前に 手っ取り早く動作確認とパフォーマンス確認を行いたいニーズがあるかと思います。 PostgreSQL標準のcontribパッケージ内に pgbench というベンチマークツールが同梱されており、 これを利用するとTPC-Bベースのパフォーマンステストを実行することができます。 TPC-BはTPCによって制定されたベンチマークパターンの1つです。 銀行の窓口業務をモデルにしたトランザクションパターンを実行し、性能を測定します。
既にセットアップ済みの環境に、追加でベンチマークツール含む contrib パッケージを導入します。 こちらのページで構築済みのサーバ環境を利用することにしました。
構成
サーバ構成
OSバージョン
CentOS 7.2.1511 x86_64
ソフトウェア・パッケージ一覧
- postgresql94-contrib-9.4.8-1PGDG.rhel7.x86_64.rpm
- postgresql94-9.4.8-1PGDG.rhel7.x86_64.rpm
- postgresql94-libs-9.4.8-1PGDG.rhel7.x86_64.rpm
- postgresql94-server-9.4.8-1PGDG.rhel7.x86_64.rpm
環境構築
インストール
contribの依存パッケージのインストール
contribパッケージが依存しているパッケージを1つインストールします。 CentOS 7.2のインストールメディアをDVDドライブに挿入し、以下のコマンドを実行します。
# mount /dev/cdrom /media/cdrom mount: /dev/sr0 is write-protected, mounting read-only # cd /media/cdrom/Packages/ # rpm -ihv libxslt-1.1.28-5.el7.x86_64.rpm 警告: libxslt-1.1.28-5.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:libxslt-1.1.28-5.el7 ################################# [100%] # cd / # umount /media/cdrom
contribパッケージのインストール
PostgreSQLがインストール済みの前提でcontribパッケージを追加します。 下記サイトからcontribパッケージをダウンロードし、サーバの /media/installer/ ディレクトリに格納します。
【関連サイト】
Red Hat系Linux向けPostgreSQL 9.4(x86_64)ダウンロードページ
【ファイル】
postgresql94-contrib-9.4.8-1PGDG.rhel7.x86_64.rpm
以下のコマンドを実行します。
# cd /media/installer/ # ls -l 合計 5844 -rw-r--r-- 1 root root 1087476 7月 7 22:42 postgresql94-9.4.8-1PGDG.rhel7.x86_64.rpm -rw-r--r-- 1 root root 627848 7月 31 13:59 postgresql94-contrib-9.4.8-1PGDG.rhel7.x86_64.rpm -rw-r--r-- 1 root root 215152 7月 7 22:43 postgresql94-libs-9.4.8-1PGDG.rhel7.x86_64.rpm -rw-r--r-- 1 root root 4044904 7月 7 22:44 postgresql94-server-9.4.8-1PGDG.rhel7.x86_64.rpm # rpm -ihv postgresql94-contrib-9.4.8-1PGDG.rhel7.x86_64.rpm 警告: postgresql94-contrib-9.4.8-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:postgresql94-contrib-9.4.8-1PGDG.################################# [100%]
利用方法
ベンチマーク用DBの所有ユーザ作成
ベンチマークで使用するDBを作成しますが、その前にDBの所有ユーザを作成します。 ユーザ名は pgtest01 とし、ログイン権限以外の権限(スーパーユーザ、DB作成、ロール作成)は付与しません。
-bash-4.2$ psql -c "\du" ロール一覧 ロール名 | 属性 | メンバー ----------+----------------------------------------------------------------------+---------- pgrepl01 | レプリケーション | {} pguser01 | | {} postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション | {} -bash-4.2$ createuser -P -S -D -R -l pgtest01 新しいロールのためのパスワード: ←パスワードを入力(表示されない) もう一度入力してください: ←上とパスワードを再入力(表示されない) -bash-4.2$ psql -c "\du" ロール一覧 ロール名 | 属性 | メンバー ----------+----------------------------------------------------------------------+---------- pgrepl01 | レプリケーション | {} pgtest01 | | {} ←ユーザが作成された pguser01 | | {} postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション | {} -bash-4.2$
ベンチマーク用DBの作成
ベンチマークで利用するデータを保持するDBを作成します。 DB名は benchdb とし、所有者は上で作成した pgtest01 とします。
-bash-4.2$ psql -l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
testdb01 | pguser01 | UTF8 | C | C |
(4 行)
-bash-4.2$ createdb -O pgtest01 benchdb
-bash-4.2$ psql -l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------+----------+------------------+----------+-------------------+-----------------------
benchdb | pgtest01 | UTF8 | C | C | ←DBが作成された
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
testdb01 | pguser01 | UTF8 | C | C |
(5 行)
-bash-4.2$
ベンチマークデータを初期化
作成したDB内にベンチマーク用オブジェクトの作成とデータのロードを行います。 基本的に全自動でやってくれます。
-bash-4.2$ pgbench -i benchdb
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.10 s, remaining 0.00 s).
vacuum...
set primary keys...
done.
-bash-4.2$ psql benchdb -c "\d" ←作成されたオブジェクトの確認
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+------------------+----------+----------
public | pgbench_accounts | テーブル | postgres
public | pgbench_branches | テーブル | postgres
public | pgbench_history | テーブル | postgres
public | pgbench_tellers | テーブル | postgres
(4 行)
-bash-4.2$
ベンチマークの実行
試しにベンチマークを実行します。 以下ではPostgreSQLと10本のコネクションをはって、それぞれ1,000回のトランザクションを実行します。 つまり合計で10,000回のトランザクションが実行されます。
-bash-4.2$ pgbench -c 10 -t 1000 benchdb starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 1 query mode: simple number of clients: 10 number of threads: 1 number of transactions per client: 1000 number of transactions actually processed: 10000/10000 latency average: 0.000 ms tps = 989.269101 (including connections establishing) tps = 990.883868 (excluding connections establishing) -bash-4.2$
上の実行結果では秒間平均990回のトランザクションが実行されたことが分かります。