ロック待ちに関するログ

データベースアプリケーションの性能が低下する主な原因は、不適切なデータベース設計である。たとえば、インデックスが適切に設定されていなければ性能は低下する。しかし、CPUもディスクもさほど使われていないのにレスポンスが低下するのであれば、ロック待ちを疑ったほうがよい。PostgreSQL 8.3では、「log_lock_waits」を有効にすることにより、deadlock_timeoutを超えて待っているトランザクションをログに表示できる。

LOG:  process 12274 still waiting for AccessExclusiveLock on relation 16467 of database 16384 after 1003.966 ms
STATEMENT:  lock table t1;

Autovacuum

autovacuumは、テーブルに対する更新の頻度によってVACUUMを実行する仕組みである。PostgreSQL 8.3ではデフォルトでautovacuumはオンになった。つまり、8.3からはautovacuumを使うことが推奨される。

これにともない、statistics collectorの制御パラメータは名前が変わって以下の3つになり、すべてデフォルトでオンになった。

track_activities
track_counts
update_process_title

autovacuumを動かすためには、少なくともtrack_countsをオンにする必要がある。

autovacuumの動作は、「log_autovacuum_min_duration」を有効にすることよってログできる。-1でログなし、0ですべてのログ、そして0以上にすることにより、指定した時間以上に時間がかかっている事象をログする。単位はミリ秒である。