ローカルのpostgresデータベースを持ついくつかの仮想マシンでXenServerを使用しています。すべてのアプリケーションが使用されておらず、データベースがアイドル状態の場合でも、各vmは一定のストレージネットワークトラフィックを引き起こし、iscsiストレージデバイスのパフォーマンスを低下させます。
iotop
を実行した後、postgres stats collectorプロセスのプロセスが常に約2 MByte/sの速度でディスクに書き込んでいることに気付きました。
次に、/etc/postgresql/8.4/main/postgresql.conf
を編集して統計の収集を無効にしました:
#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------
# - Query/Index Statistics Collector -
track_activities = off
track_counts = off
...
http://www.postgresql.org/docs/8.4/static/runtime-config-statistics.htm で提案されています。
これは継続的な書き込みを排除しましたが、統計の追跡をオフにする欠点はありますか?
または、ディスク/ネットワークトラフィックを回避するために、ラムディスクにpg_stat_tmpディレクトリを配置する必要がありますか?
システムは最新のDebian 6.0.7(squeeze)で、postgres 8.4と約50のテーブルを持つ約20のデータベースがあり、ダンプファイルの合計サイズは100 MB未満です。
PostgreSQLのアップグレードはオプションではないため、pg_stat_tmpディレクトリをtmpfsファイルシステムに配置しようとしました。これにより、パフォーマンスが大幅に向上しました。私は現在、数十システムでこれを数か月間実行していて、目立った欠点はありません。
これを行うには、/ etc/fstabファイルでtmpfsを使用してpg_stat_tmpをマウントします。
# <file system> <mount point> <type> <options> <dump> <pass>
tmpfs /var/lib/postgresql/8.4/main/pg_stat_tmp tmpfs defaults,noatime,mode=1777,uid=postgres,gid=postgres,nosuid,nodev 0 0
ここでも同じ問題。私も無効にしましたtrack_*
等々。
副作用は、autovacuum
がこの収集されたデータを使用して起動することです。
だから、私は毎晩vacuumdb
をスケジュールするように注意します。
他の解決策は、autovacuum_naptime
システムが停止するのに十分な高さ。
PostgreSQLをアップグレードします。少なくとも、最新の8.4リリースを使用していることを確認してください。それで問題が解決せず、実用的である場合は、おそらく9.2にアップグレードする必要があります。統計コレクターの周りの少なくともいくつかの問題は8.4以降対処されており、 約1年で寿命が尽きます です。 pgsql-generalメーリングリストのアーカイブを検索する で詳細情報を見つけることができる場合があります。
8.4から9.2へのアップグレードにあまり問題はないはずですが、いつものように各.0リリースのリリースノートのアップグレードセクションを読む必要があります中間(9.0、9.1、9.2)。 standard_conforming_strings
とbytea_output
には特に注意してください。