PR

VACUUMの実行優先度の設定

 PostgreSQLの運用にはVACUUMが不可欠だが,一方でVACUUM運用中に負荷がかかるという問題もある.8.0では,vacuum_cost_delay, vacuum_cost_page_hit, vacuum_cost_page_miss, vacuum_cost_page_dirty, vacuum_cost_limitという新しいオプションがpostgresql.confに追加され,VCUUMの実行優先度を下げて業務処理の負担が軽減できるようになった。

ログの取得の改善

 ログ(WALログではない)の取得方法が大幅に改善され,ログのローテートも可能になった。このために,新しくposgresql.confに以下のパラメータが追加された。

  • log_destination

     syslogやstderrなどのログの出力先の指定("syslog"パラメータは廃止)

  • redirect_stderr

     stderrへのメッセージをファイルなどに送るかどうかの指定

  • log_directory/log_filename

     ログ・ファイルを指定する。ログ・ファイル名はstrftime()が認識するフォーマット・パラメータで指定できる.主なフォーマット・パラメータとしては次のようなものがある

    %Y(年),%m(月),%d(日),%a(曜日)

  • log_rotation_age

     分単位でログ・ファイルの最大存続時間を指定する.この時間を越えると新しいログ・ファイルが生成される

  • log_rotation_size

     Kバイト単位でログ・ファイルの最大サイズを指定する.このサイズを越えると新しいログ・ファイルが生成される

  • log_truncate_on_rotation

     既存のログファイルを上書きするかどうかの指定

     たとえば,1日おきにログファイルを分割し,過去1週間分のログファイルを保存するには,

    log_filename = server_log.%a
    log_truncate_on_rotation = true
    og_rotation_age = 1440
    
    とすればよい。これで,server_log.Mon,server_log.Tue... のようなログ・ファイルが維持されるようになる。

     また,ログ・ファイルの中に記述される情報のフォーマットが自由に指定できるようになった.これはlog_line_prefixというパラメータによって制御できる(これにともなってlog_pid, log_timestamp, and log_source_portは廃止された)。指定可能な情報は以下のようになる。

    表1●log_line_prefixでのログ・フォーマット指定

    フォーマット指定子 意味
    %u ユーザー名
    %d データベース名
    %r リモート・ホスト名もしくはIPアドレス、およびリモート・ポート
    %p プロセスID
    %t 時刻
    %i コマンド・タグ
    %c セッションID
    %l 各プロセスのログ行の番号
    %s セッション開始時刻
    %x トランザクションID

     特に,セッションIDやトランザクションIDが記録できるようになったのが目新しい。

     なお,従来SQLをログするかどうかを指定するlog_statementはtrueかfalseを設定するようになっていたが,8.0ではnone,ddl,mod,およびallのどれかを指定するように変わっているので注意が必要だ。それぞれの意味は以下の通り。

    none   SQL文をログしない
    ddl   CREATE/ALTER/DROPをログ
    mod   ddlに加え,INSERT/UPDATE/DELETE/TRUNCATE/COPY FROMをログ
    all   すべて

     また,セッション開始時刻のログ(log_connectionsで指定)に加え,セッションが終了した時刻をlog_disconnectionsで取得できるようになった。