Configurare i parametri dell'autovacuum server
Il processo di pulizia viene configurato utilizzando i parametri del server autovacuum che consentono di ottimizzare il processo di pulizia per il carico di lavoro. Nel 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 query sulle viste del catalogo di sistema per trovare la configurazione corrente di autovacuum usando la query seguente.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
| Nome del parametro | Predefinito | Descrizione |
|---|---|---|
| autovacuum | ON | Abilita o disabilita il processo del server autovacuum. L'opzione Autovacuum deve essere sempre abilitata. |
| 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 il processo di analisi per una tabella. |
| autovacuum_freeze_max_age | 200000000 | Validità massima (nelle transazioni) prima di attivare autovacuum in una tabella per impedire il wrapping dell'ID transazione. |
| 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 round, il daemon esamina il database e rilascia i comandi VACUUM e ANALYZE in base alle esigenze per le tabelle in tale database. |
| autovacuum_vacuum_cost_limit | -1 | Costo massimo per le operazioni a vuoto automatico. Se viene specificato -1, ovvero 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 lavoratore non può superare il valore di questa variabile. |
| autovacuum_vacuum_insert_threshold | 1000 | Numero di righe inserite che attivano il vuoto per una 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 vuoto 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 | La memoria massima consentita che ogni processo "autovacuum" può usare. |
| log_autovacuum_min_duration | -1 | Tempo in millisecondi registrato dalle azioni autovacuum. |
Il processo di vuoto non deve essere eseguito troppo frequentemente o troppo raramente. La frequenza ottimale dipende dal carico di lavoro. Testare ognuno dei parametri di autovacuum per trovare ciò che funziona meglio per il carico di lavoro. Il costo del processo vacuum include:
- Le pagine di dati vengono bloccate quando viene eseguito il processo vacuum.
- Il processo vacuum utilizza 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, può 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 frequenza 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.