[pgsql-jp: 41382] Re: データベース接続台数を知る方法について
小沢 和也 (Kazuya Ozawa)
ozawa @ nippa.co.jp
2013年 4月 25日 (木) 09:42:10 JST
MauMaさま
お世話になります。ご回答ありがとうございます。
> 8.0ではtemplate1に接続するような自動処理は思いつきません。
自動処理という言い方が良いかはわかりませんが、
こちらで発行していないSQL等々が多数出ているのが
確認できます。
以下のようなログです。
LOG: connection received: host=127.0.0.1 port=1207
LOG: connection authorized: user=postgres database=template1
statement: SET DateStyle=ISO;SELECT oid, pg_encoding_to_char(encoding) AS
encoding, datlastsysoid
FROM pg_database WHERE datname='template1'
statement: set client_encoding to 'UNICODE'
statement: SELECT version();
statement: SELECT proname, pronargs, proargtypes[0] AS arg0, proargtypes[1]
AS arg1, proargtypes[2] AS arg2 FROM pg_proc
WHERE proname IN ('pg_tablespace_size', 'pg_file_read', 'pg_rotate_log',
'pg_postmaster_starttime', 'pg_terminate_backend', 'pg_reload_conf')
statement: SELECT usecreatedb, usesuper, CASE WHEN usesuper THEN
pg_postmaster_starttime() ELSE NULL END as upsince
FROM pg_user WHERE usename=current_user
statement: SELECT db.oid, datname, spcname, datallowconn, datconfig, datacl,
pg_encoding_to_char(encoding) AS serverencoding, pg_get_userbyid(datdba) AS
datowner,has_database_privilege(db.oid, 'CREATE') as cancreate
FROM pg_database db
LEFT OUTER JOIN pg_tablespace ta ON db.dattablespace=ta.OID
ORDER BY datname
statement: SELECT ts.oid, spcname, spclocation, pg_get_userbyid(spcowner) as
spcuser, spcacl FROM pg_tablespace ts ORDER BY spcname
(長いので省略)
この処理の直前または最中でSELECT count(*) FROM pg_stat_activity WHERE
usename='MyUser';はおかしくなり、
処理が終われば正常に戻るみたいな感じです。
処理がいつ始まるかも定かではなく、一度外部接続があった後に
行われてるようです。
> だれがどんな処理をしているか調べるために、PostgreSQLのサーバログファイルにログを追加してみてはいかがでしょう。
> postgresql.confに次のようなパラメータを設定します。
>
> log_connections = on
> log_disconnections = on
> log_statement = 'all'
> log_min_error_statement = 'debug5'
上3つはすでに設定済みです。最後の物はERRORのみに
していましたが、Debug5に変えてみました。そうしたら、
大量のログは出ますが、どれが参考になるのかが
わかりにくくなってしまいました・・・
こういった自動処理が今実行中かどうかを知るSQLがあれば
良いのですが、そんなものはありますか?
(それとて、自動処理実行中にまともに動くかわかりませんが)
小沢和也
pgsql-jp メーリングリストの案内