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について調べますかね。