*PostgreSQLのステートメントログ出力

**目的
-PostgreSQLに対して出されたSQLをすべてログ出力する。

**方法(標準出力+rotatelogs)
-<PostgreSQL data Dir>/postgresql.confの syslog、log_statementパラメタを変更
	syslog = 0
	log_statement = true

-/etc/init.d/postgresqlのstart部分のコマンド実行部分を次のようにする(rotatelogsはapache-httpdにより提供されるもの。ここでは86400秒(1日)でローテーションするようになっている)
    su -l postgres -c "<PostgreSQL Install Dir>/bin/pg_ctl \
      -D $PGDATA -o '-i' -p <PostgreSQL Install Dir>/bin/postmaster start \
      |<Apache bin Dir>/rotatelogs 
      |<Apache bin Dir>/rotatelogs \
      <PostgreSQL Install Dir>/log/stmt-%G%m%d.log 86400 2>&1" &

-PostgreSQL、syslogdの再起動
	/etc/init.d/postgresql restart
	/etc/init.d/syslogd restart


**方法(Syslogを使用)
-<PostgreSQL data Dir>/postgresql.confの syslog、log_statementパラメタを変更
	syslog = 2
	log_statement = true

-/etc/syslog.confに以下の行を追加(ファイル名の先頭に"-"を記述すると非同期I/Oになる)
	local0.*		-<PostgreSQL Install Dir>/log/statement.log

-PostgreSQL、syslogdの再起動
	/etc/init.d/postgresql restart
	/etc/init.d/syslogd restart

-ログファイルを分割するように/etc/logrotate.d/postgresqlファイルを作成し、以下のように記述する。

	<PostgreSQL Install Dir>/log/statement.log {
		missingok
	}

**問題点
syslogを使用する方法はとにかく遅い。Ultra160 SCSIのディスクにもかかわらず、syslog経由なのだが非同期I/O%%になっていないのかな?%%でも遅い->非同期I/Oにするには syslog.confのファイル名の指定部分のファイル名の先頭に"-"を付ける。
本番運用では%%やめておいたほうが良いと思われる%%標準出力からrotatelogsへ渡す方法の方が良い。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS