2013-10-22 9 views
5

Ho PostgreSQL 9.2 in esecuzione su Ubuntu. Il processo autovacuum è in esecuzione sul server.autovacuum postgresql non funziona nonostante il processo sia in esecuzione

Il database ha un carico pesante, migliaia di aggiunte e centinaia di eliminazioni quotidiane eppure sembra che l'autovacuum non si accenda.

Non c'è nulla relativo al vuoto nei registri.

Facendo ps -ef | grep -i vacuum

produce: postgres 1406 1130 0 Oct13 00:00:14 postgres: autovacuum launcher process

interrogazione SELECT last_autovacuum , last_autoanalyze FROM pg_stat_user_tables; Esecuzione produce nessun record in ultima colonna autovacuum, e 2 entrys nella colonna suto_analyze.

La sezione pertinente di 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 

Qualche idea?

+0

Vedi http://www.postgresql.org/docs/9.2/static/monitoring-stats.html last_autovacuum - L'ultima volta in cui questo tavolo è stato aspirato dal autovacuum demone. Immagino che sia il momento di finire l'autovaccuum. Se il daemon produce un carico elevato, è comunque possibile eseguire comunque la maggior parte delle volte. Prova a eseguire il vuoto dalla riga di comando come un comando SQL per vedere quanto tempo esegue il vuoto su ogni tabella. –

+0

"1000 di aggiunte e centinaia di eliminazioni" non è tutta questa attività. Hai gonfio nei tavoli? N_dead_tup suggerisce che l'aspirazione sia effettivamente dovuta per qualsiasi tabella? Forse l'aspirapolvere non è necessario molto spesso per te. L'impostazione log_autovacuum_min_duration = 0 dovrebbe ottenere più materiale scritto nei log, anche se forse non abbastanza per dimostrarti che funziona bene. Cos'è suto_analyze? – jjanes

risposta

6

La voce corrispondente nella configurazione citato è probabilmente:

autovacuum_vacuum_scale_factor = 0,2

Con questa impostazione predefinita, è normale che autovacuum salta un tavolo se meno del 20% delle sue righe sono state cancellato o aggiornato (o meno di autovacuum_vacuum_threshold righe ma a 128 che non dovrebbe importare qui).

Vedi la sua definizione nel documentation:

autovacuum_vacuum_scale_factor (virgola mobile)

Specifica una frazione della dimensione della tabella per aggiungere al autovacuum_vacuum_threshold momento di decidere se attivare il vuoto. Il valore predefinito è 0,2 (20% della dimensione della tabella). Questo parametro può essere impostato solo nel file postgresql.conf o sulla riga di comando del server. Questa impostazione può essere sovrascritta per singole tabelle modificando i parametri di memoria .

Per rendere automatiche alcune tabelle se non ci piacciono i valori predefiniti, è possibile abbassare questo parametro caso per caso. Ad esempio, per impostarlo a 1%:

ALTER TABLE tablename SET (autovacuum_vacuum_scale_factor=0.01); 
Problemi correlati