デバッグ出力

トラブルシューティングの際postmasterは, ときには便利なメッセージをその機会に応じて出力してくれます.もし, postmasterのデバッグ出力を見てみたいと 思ったら,postmasterを-dオプションつきで起動して,その出力をログ ファイルにリダイレクトします:

% postmaster -d >& pm.log &
    
これらのメッセージを見る必要がなければ:
% postmaster -S
    
とすることもできます. 最後の例では末尾にアンパサンド("&")がないので postmasterはフォアグラウンドで動作する ことと,-Sオプションつきで起動すると, postmasterが何もメッセージを出力せず, 黙々と("S"ilent)仕事をするようになるのを見ておいてください.

pg_options

Note: このセクションはMassimo Dal Zottoの手によるもので す.

オプションファイル,data/pg_optionsには, トレース情報や,その他諸々のチューニングパラメータを制御する目的で バックエンドに渡す,実行時オプションを記述します.このファイルの いいところは,バックエンドがSIGHUPシグナルを受けた時にこのファイルを 再度読みこむので,Postgresを立ち上げ 直さなくても,その場でさっと実行時のオプションを変更できることです. ファイルで指定できるオプションは,トレーシングパッケージ (backend/utils/misc/trace.c)で使うデバッグ用 フラグ,あるいはバックエンドの動作をコントロールするのに使える数値 パラメータなどです. この新しいオプションとパラメータは, backend/utils/misc/trace.cと, backend/include/utils/trace.hに定義されています.

またこのオプションはPostgresの-Tオプションで 指定することもできます:

postgres options -T "verbose=2,query,hostlookup-"
    

エラーとデバッグメッセージを出力する関数も syslog(2)を利用できるようになりました. 標準出力,あるいは標準エラー出力に表示されるメッセージには, タイムスタンプとバックエンドのプロセスIDが行頭に付加されます:

#timestamp          #pid    #message
980127.17:52:14.173 [29271] StartTransactionCommand
980127.17:52:14.174 [29271] ProcessUtility: drop table t;
980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
980127.17:52:14.186 [29286] Async_NotifyHandler
980127.17:52:14.186 [29286] Waking up sleeping backend process
980127.19:52:14.292 [29286] Async_NotifyFrontEnd
980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
980127.19:52:14.466 [29286] Async_NotifyHandler done
    

このフォーマットはログをずっと読みやすく,そしてバックエンドがいつ, 何をしているのかを正確に理解できるようにしてくれます.さらにawkや perlで,ログを追っかけるちょっとしたスクリプトを書いて,データベースの エラーや障害を検出する,トランザクションタイムの統計を計算する,と いったこともやりやすくなります.

syslogへのメッセージ出力には,LOG_LOCAL0ファシリティを使います. syslogを使うかどうかは,pg_optionのsyslogオプションで指定すれば コントロールできます. ただ残念なことに,多くの関数は標準出力や標準エラー出力への表示に 直接printf()を呼び出すので,こういう出力は syslogにリダイレクトしたり,タイムスタンプをつけてあげることができま せん.できればprintfの呼び出しを全部PRINTFマクロに置き換え, 標準エラー出力への出力はEPRINTFマクロを代わりに使うよう変更すれば すっきりするのですが.そうすればどの出力も一律にコントロールできる ようになりますからね.

pg_optionsファイルのフォーマットは以下の通りです.

# コメント
option=整数値
                                        # optionを[整数値]に設定
option       # option = 1 に設定
option+      # option = 1 に設定
option-      # option = 0 に設定
     
キーワードbackend/utils/misc/trace.cで定義されている オプション名の短縮形でもかまいません.

すべてのオプションと,オプションが取りうる値のリストは, pg_options の使用を参照 してください.