[pgsql-jp: 41380] Re: データベース接続台数を知る方法について
MauMau
maumau307 @ gmail.com
2013年 4月 24日 (水) 21:56:31 JST
MauMauです。
From: "小沢 和也 (Kazuya Ozawa)" <ozawa @ nippa.co.jp>
> ログから調べてみましたところ、以下の事がわかりました。
>
>
> Postgresがtemplate1にpostgresユーザで接続して何かの自動処理をしているとき、
>
> SELECT count(*) FROM pg_stat_activity WHERE usename='MyUser'
> は接続拒否される(?)
> コマンド失敗したのでDisconnectをしたが、Postgresでは自動処理が
> 終わるまで、Disconnectもできなくて、Connectしたままになっている。
> これが接続数が合わない原因となっている。つまり、他の接続とは、
> 切断できない自分自身である。
>
>
> この自動処理は、外部からの接続(ローカルホストでない)があった後に
> 実行されるみたいです。これが何をやっているのかはよくわかりませんが、
> 完全に終了して、Disconnectが可能になるまで、12分間かかっています。
> 外部接続の無かった土日には行われていませんでした。
>
> Configの設定とかで、この処理を止めることはできないのでしょうか。
> (止める事によって他に影響があるかもしれませんが)
8.0ではtemplate1に接続するような自動処理は思いつきません。
だれがどんな処理をしているか調べるために、PostgreSQLのサーバログファイルにログを追加してみてはいかがでしょう。
postgresql.confに次のようなパラメータを設定します。
log_connections = on
log_disconnections = on
log_statement = 'all'
log_min_error_statement = 'debug5'
これらのすべてが8.0にあるかは、マニュアルをご覧ください。
最後のパラメータ値は、大量のデバッグログを出します。
それが許容できそうでなければ、debug5〜debug1のどれかを設定します。
数字が小さいほどログが少なくなりますが、処理を特定できる可能性も低くなります。
以上です。
pgsql-jp メーリングリストの案内