Configurare i parametri del server per il processo autovacuum

Completato

Il processo vacuum viene configurato usando i parametri del server autovacuum che consentono di ottimizzare il processo vacuum per il carico di lavoro. Nella portale di Azure selezionare il server di Database di Azure per PostgreSQL e selezionare Parametri del server dal menu a sinistra. Nella barra di ricerca immettere autovacuum. In alternativa, è possibile usare SQL per eseguire una query delle viste del catalogo di sistema per trovare la configurazione corrente di autovacuum tramite la query seguente.

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
Nome parametro Default Descrizione
autovacuum In... Abilita o disabilita il processo del server autovacuum. Il processo autovacuum deve essere sempre abilitato.
autovacuum_analyze_scale_factor 0,1 Specifica una frazione della tabella da aggiungere ad autovacuum_vacuum_threshold quando si decide se attivare un'operazione vacuum. Ad esempio, 0,2 è il 20% delle dimensioni della tabella.
autovacuum_analyze_threshold 50 Numero di righe inserite, aggiornate o eliminate necessarie per attivare l'analisi per qualsiasi tabella.
autovacuum_freeze_max_age 200000000 Età massima (espressa in transazioni) prima di attivare autovacuum in una tabella per impedire il wraparound degli ID delle transazioni.
autovacuum_max_workers 3 Numero massimo di processi autovacuum in esecuzione in qualsiasi momento, oltre al launcher di autovacuum.
autovacuum_multixact_freeze_max_age 400000000 Età massima (espressa in multixact) prima di attivare autovacuum in una tabella per impedire il wraparound multixact.
autovacuum_naptime 60 sec Ritardo tra processi autovacuum in un database. In ogni ciclo il daemon esamina il database e genera i comandi VACUUM e ANALYZE in base alle necessità per le tabelle nel database.
autovacuum_vacuum_cost_limit -1 Costo massimo per le operazioni di vacuum automatico. Se viene specificato -1, l'impostazione predefinita, viene usato il valore vacuum_cost_limit normale. Con più di un ruolo di lavoro, il valore viene distribuito proporzionalmente tra i lavoratori di autovacuum in esecuzione. La somma per ogni thread di lavoro non può superare il valore di questa variabile.
autovacuum_vacuum_insert_threshold 1000 Numero di righe inserite che attivano il processo vacuum per qualsiasi tabella.
autovacuum_vacuum_scale_factor 0,2 Usato con autovacuum_vacuum_threshold. Frazione di una tabella usata per decidere se attivare un processo vacuum.
autovacuum_vacuum_threshold 50 Numero minimo di righe aggiornate, inserite o eliminate per attivare un processo vacuum per una tabella.
autovacuum_vacuum_insert_scale_factor 0,2 Specifica una frazione delle dimensioni della tabella da aggiungere ad autovacuum_vacuum_threshold per attivare il processo vacuum.
autovacuum_work_mem -1 KB Memoria massima che ogni processo autovacuum può usare.
log_autovacuum_min_duration -1 Tempo in millisecondi registrato dalle azioni di autovacuum.

Il processo vacuum non deve essere eseguito troppo spesso o troppo raramente. La frequenza ottimale dipende dal carico di lavoro. Testare ognuno dei parametri autovacuum per trovare quello più adatto al carico di lavoro. Il costo del processo vacuum include:

  • Le pagine di dati vengono bloccate quando viene eseguito il processo vacuum.
  • Il processo vacuum usa tempo di calcolo e memoria.

Ottimizzare il processo vacuum a livello di tabella

In Database di Azure per PostgreSQL, i parametri autovacuum possono essere impostati a livello di tabella. Quando alcune tabelle vengono aggiornate più di altre, è possibile migliorare le prestazioni. Esempio di impostazione di autovacuum a livello di tabella:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

A livello di tabella, autovacuum è un processo sincrono. Maggiore è la percentuale di tuple morte presenti in una tabella, maggiore è il "costo" del processo autovacuum.

Per le tabelle con una percentuale elevata di aggiornamenti, è consigliabile suddividere la tabella in più tabelle. Questa suddivisione consente di eseguire il processo autovacuum in parallelo e ridurre il "costo" per qualsiasi tabella. È anche possibile aumentare il numero di processi di lavoro autovacuum paralleli.