OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

PostgreSQL 9.4.8にcontribパッケージをインストールしてpgbenchを実行する

カテゴリ:OSSセットアップ | ソフトウェア:PostgreSQL | タグ:
最終更新日:2021/01/01 | 公開日:2016/08/01

目次

概要

 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回のトランザクションが実行されたことが分かります。