Configurare i parametri del server per il processo autovacuum
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.