pgbenchをネットワーク経由で行う

実験でPostgreSQLベンチマークをすることになりました \(^o^)/
ベンチマークにはpgbenchを使うことに!!


環境:
postgres (PostgreSQL) 9.2
pgbench (PostgreSQL) 9.2

実験内容:
Index of /reporpms/
rpmパッケージがあります。
CentOS5.5にPostgreSQL9.0をインストールする時の注意点 - Paradigm Shift Design
にあるドキュメントを参考にインストールすればok。
なお、pgbenchは、postgresql-contribパッケージに含まれて
いるので、postgresql本体に加えてこちらも入れること

# yum install postgresql-server
# yum install postgresql-contrib
root# su postgres

PostgreSQL管理(別のユーザーを管理者roleに入れてそのユーザーで作業をしてもok)

postgres> createdb slab34-itsys

ベンチマーク用DBの作成(DB名は任意でok)

postgres> pgbench -i slab34-itsys

ベンチマーク用DBの初期化

ベンチマーク用DBを作成したら、以下の基本ベンチマーク
行って結果を報告して下さい。

(ベンチマーク1)

postgres> pgbench -c 50 -t 50 slab34-itsys
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 50
number of threads: 1
number of transactions per client: 50
number of transactions actually processed: 2500/2500
tps = 914.440218 (including connections establishing)
tps = 940.664395 (excluding connections establishing)

(ベンチマーク2)

postgres> pgbench -c 100 -t 100 slab34-itsys
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 100
number of threads: 1
number of transactions per client: 100
number of transactions actually processed: 10000/10000
tps = 790.751122 (including connections establishing)
tps = 799.861336 (excluding connections establishing)


ここまでは順調♪
次からが厄介でした。。。
pgbenchをネットワーク経由で行う!!


[SQL] 3. pgbenchの使用方法 | TECHSCORE(テックスコア)
ーh PostgreSQL(postmaster)が起動しているホスト名を指定します。省略時には自ホストへUnix domain socketで接続します。

ーh オプションを加えることでネットワーク経由でできることがわかった。
実際にやってみると。。。

ash-4.1$ pgbench -h lt5.st.ie.u-ryukyu.ac.jp -p 5432 slab34-itsys
Connection to database "slab" failed:
could not connect to server: Connection refused
	Is the server running on host "lt5.st.ie.u-ryukyu.ac.jp" (2001:2f8:1c:a530:250:56ff:fe8b:42) and accepting
	TCP/IP connections on port 5432?
could not connect to server: Connection refused
	Is the server running on host "lt5.st.ie.u-ryukyu.ac.jp" (133.13.59.225) and accepting
	TCP/IP connections on port 5432?

エラーでした。
http://www.postgresql.jp/document/pg803doc/html/postmaster-start.html
"接続するサーバが見つけられませんでした"という失敗らしいですね。
TCP/IPを許可する設定をしないといけません。

http://ossipedia.ipa.go.jp/documents/pgbench/pgbench_pgsql-x.x_pgcluster-x.x.html

/var/lib/gpsql/data/postgresql.conf
をいじればいいことがわかった。
あれ?
/var/lib/pgsql/data
に何も入ってない!!!
PostgreSQL8.3がスゴイらしい | とりあえず今日いじったシステムの公開できる箇所

よくわからないけど、初期化した方がいいみたい。

[root@lt5 ~]# service postgresql initdb
データベースを初期化中: mkdir: ディレクトリ `/var/lib/pgsql/data/pg_log' を作成できません: ファイルが存在します
                                                           [失敗]

ファイルを消してから再度挑戦!

[root@lt5 ~]# mv /var/lib/pgsql/data/pg_log /var/lib/pgsql/data/pg_log.old
[root@lt5 ~]# service postgresql initdb
データベースを初期化中:                                    [  OK  ]
[root@lt5 ~]# ls /var/lib/pgsql/data/
PG_VERSION  global   pg_hba.conf    pg_log        pg_stat_tmp  pg_tblspc    pg_xlog
base        pg_clog  pg_ident.conf  pg_multixact  pg_subtrans  pg_twophase  postgresql.conf

キタ━━━(゚∀゚)━━━!!!!
次に進める!!
/var/lib/gpsql/data/postgresql.conf
http://ossipedia.ipa.go.jp/documents/pgbench/pgbench_pgsql-x.x_pgcluster-x.x.html
あれ?
#tcpip_socket = false がない!!

調べて、行き着いたのはバージョンの違いでした。
http://www.postgresql.jp/document/9.1/html/runtime-config-connection.html
/var/lib/gpsql/data/postgresql.conf を以下のように変更。

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
					# (change requires restart)
port = 5432                             # (change requires restart) 
max_connections = 100                   # (change requires restart)  

設定を変更しrestartをした。

[root@lt5 ~]# service postgresql restart
postgresql サービスを停止中:                               [  OK  ]
postgresql サービスを開始中:                               [失敗]

失敗!?
これは何度やっても失敗!!
/var/lib/pgsql/pgstartup.log でログを見ることに

ヒント:  すでに他にpostmasterがポート5432で稼動していませんか? 稼動していなければ数秒待ってから再実行してください
WARNING:  "localhost"に関する監視用ソケットを作成できませんでした
FATAL:  TCP/IPソケットを作成できませんでした

5432ポートが使用中のため起動できないことが判明。
psコマンドで確認してみる。

$ ps aux | grep postmaster
postgres  2232  0.0  0.4 218144  8548 ?        S    Jun25   0:07 /usr/pgsql-9.2/bin/postmaster -p 5432 -D /var/lib/pgsql/9.2/data
root      4118  0.0  0.0 107452   924 pts/0    S+   02:17   0:00 grep postmaster

確かに稼働中みたいですね。
http://www.postgresql.jp/document/pg812doc/html/app-postmaster.html
postmasterを通常に終了させるために、SIGTERM、SIGINT、SIGQUITを使用する。
普通にkillするのは危険みたいですね!
Linux のシグナルの種類

  • 15 オプションを使ってkillをしました。
[root@lt5 pgsql]# kill -15 2232
[root@lt5 pgsql]# ps aux | grep postmaster
root      4162  0.0  0.0 107448   920 pts/0    S+   02:22   0:00 grep postmaster
[root@lt5 pgsql]# service postgresql start
postgresql サービスを開始中:                               [  OK  ]

これで設定の変更完了!!
ベンチマークするサーバ側でpgbenchをしてみた。

bash-4.1$ pgbench -h lt5.st.ie.u-ryukyu.ac.jp -p 5432 -i slab
Connection to database "slab" failed:
FATAL:  ホスト"2001:2f8:1c:a530:250:56ff:fe8b:43"、ユーザ"postgres"、データベース"slab、SSL無効用のエントリがpg_hba.confにありません。

pg_hba.confの設定を変更する必要があるみたいですね。
http://safe-linux.homeip.net/web/PostgreSQL/02-config.html

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                                                         

# "local" is for Unix domain socket connections only                                                                                                 
local   all         all                               ident
# IPv4 local connections:                                                                                                                            
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:                                                                       host    all         all         2001:2f8:1c:a530:250:56ff:fe8b:43/128      trust
host    all         all         ::1/128               ident

セキュリティに関しては無条件でいいかなー。
できればいいよね (○ゝω・)b⌒☆NE!

設定を変更し、restart!!

[root@lt5 ~]# service postgresql restart
postgresql サービスを停止中:                               [  OK  ]
postgresql サービスを開始中:                               [  OK  ]

pgbench側のサーバで実行

bash-4.1$ pgbench -c 50 -t 50 -h lt5.st.ie.u-ryukyu.ac.jp  slab34-itsys
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 50
number of threads: 1
number of transactions per client: 50
number of transactions actually processed: 2500/2500
tps = 808.411620 (including connections establishing)
tps = 847.718265 (excluding connections establishing)

できた(∩´∀`)∩ワーイ
長かった。。。
まぁちゃんとセキュリティ面も考えたほうがいいかもね。

以上!
今度はpgbenchについて調べますかね。