2013-10-22 29 views
5

私はPostgreSQL 9.2をUbuntu上で実行しています。 自動バキュームプロセスがサーバー上で実行されています。プロセスが動作していてもpostgresqlの自動バキュームが機能しない

データベースには負荷がかかり、追加は1000件、削除は100件ありますが、自動バキュームは起動していないようです。

ログには真空に関することはありません。 ps -ef | grep -i vacuum

を行う

は生成:クエリSELECT last_autovacuum , last_autoanalyze FROM pg_stat_user_tables; は、最後の自動バキュームの列にはレコードを生成しない、とsuto_analyze列で2 entrys実行postgres 1406 1130 0 Oct13 00:00:14 postgres: autovacuum launcher process

を。

はpostgresql.confの関連セクションには、次のとおりです。

#------------------------------------------------------------------------------ 
# AUTOVACUUM PARAMETERS 
#------------------------------------------------------------------------------ 

autovacuum = on   # Enable autovacuum subprocess? 'on' 
        # requires track_counts to also be on. 
log_autovacuum_min_duration = 250 # -1 disables, 0 logs all actions and 
        # their durations, > 0 logs only 
        # actions running at least this number 
        # of milliseconds. 
autovacuum_max_workers = 3  # max number of autovacuum subprocesses 
        # (change requires restart) 
#autovacuum_naptime = 1min  # time between autovacuum runs 
autovacuum_vacuum_threshold = 128 # min number of row updates before 
        # vacuum 
autovacuum_analyze_threshold = 128 # min number of row updates before 
        # analyze 
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum 
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze 
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum 
        # (change requires restart) 
#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for 
        # autovacuum, in milliseconds; 
        # -1 means use vacuum_cost_delay 
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for 
        # autovacuum, -1 means use 
        # vacuum_cost_limit 

任意の考え?

+0

はhttp://www.postgresql.org/docs/9.2/static/monitoring-stats.html last_autovacuumを参照してください - このテーブルは自動バキュームで真空たときの最後の時間をデーモン。私はそれがオートバイの仕上げのタイムスタンプだと思います。デーモンが高負荷を生成する場合は、とにかく実行可能です。 SQLコマンドとしてコマンドラインからvacuumを実行して、各テーブルで真空がどれくらい長く実行されているかを確認してください。 –

+0

「1000の追加と100の削除」はそれほど多くの活動ではありません。あなたはテーブルに膨らんでいますか? n_dead_tupは真空引きが実際にはどのテーブルでも行われることを提案していますか?たぶんあなたのために非常に頻繁に掃除する必要はありません。 log_autovacuum_min_duration = 0に設定すると、ログに書き込まれる情報が増えるはずですが、うまく機能していることを証明するには不十分です。 suto_analyzeとは何ですか? – jjanes

答えて

6

引用された構成では、関連するエントリは、おそらく次のとおりです。このデフォルトでは

autovacuum_vacuum_scale_factor = 0.2

、それは、その行の20%未満がされている場合は自動バキュームがテーブルをスキップすることが普通です削除されたか更新された(またはautovacuum_vacuum_threshold行未満ではあるが、ここでは問題にならない128である)。

documentationでその定義を参照してください:

autovacuum_vacuum_scale_factor(浮動小数点)

はVACUUMをトリガーするかどうかを決定する際に autovacuum_vacuum_thresholdに追加するテーブル容量の割合を指定します。 デフォルトは0.2(テーブルサイズの20%)です。このパラメータは、postgresql.confファイルまたはサーバのコマンドラインでのみ に設定できます。この の設定は、記憶域を変更することによって個々のテーブルに対してオーバーライドすることができます。

デフォルトを気に入らない場合は、自動バキューム処理で特定のテーブルを処理させるには、このパラメータを個別に下げることができます。例えば、1%でそれを設定するには:

ALTER TABLE tablename SET (autovacuum_vacuum_scale_factor=0.01); 
関連する問題