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 \
         <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
Last-modified: 2004-07-09 (金) 14:44:34 (5492d)