Eseguire l'ottimizzazione intelligente in Database di Azure per PostgreSQL - Server flessibile

SI APPLICA A: Database di Azure per PostgreSQL - Server flessibile

Il server flessibile di Database di Azure per PostgreSQL offre una funzionalità di ottimizzazione intelligente progettata per migliorare automaticamente le prestazioni e prevenire i problemi. L'ottimizzazione intelligente monitora continuamente lo stato del database del server flessibile di Database di Azure per PostgreSQL e adatta in modo dinamico il database al carico di lavoro.

Questa funzionalità include due funzioni di ottimizzazione automatica:

  • Ottimizzazione autovacuum: questa funzione tiene traccia del rapporto di software bloat e regola le impostazioni autovacuum di conseguenza. Influisce sull'utilizzo delle risorse corrente e stimato per evitare interruzioni del carico di lavoro.
  • Ottimizzazione scritture: questa funzione monitora il volume e i modelli delle operazioni di scrittura e modifica i parametri che influiscono sulle prestazioni di scrittura. Queste regolazioni migliorano sia le prestazioni del sistema che l'affidabilità, per evitare in modo proattivo potenziali complicazioni.

È possibile abilitare l'ottimizzazione intelligente usando il portale di Azure o l'interfaccia della riga di comando di Azure.

Perché scegliere l'ottimizzazione intelligente?

Il processo autovacuum è una parte fondamentale della gestione dell'integrità e delle prestazioni di un database di server flessibile di Database di Azure per PostgreSQL. Consente di recuperare l'archiviazione occupata da righe "non attive", liberando spazio e mantenendo il database privo di problemi.

Altrettanto importante è l'ottimizzazione delle operazioni di scrittura all'interno del database. Questa attività in genere è compito degli amministratori di database. Il monitoraggio costante di un database e l'ottimizzazione delle operazioni di scrittura possono richiedere molto tempo. Questa attività diventa sempre più complessa quando si gestiscono più database.

Questo è il punto in cui si trovano i passaggi di ottimizzazione intelligente. Anziché supervisionare e ottimizzare manualmente il database, è possibile usare l'ottimizzazione intelligente per farlo in modo automatico. È quindi possibile concentrarsi su altre attività importanti.

La funzione di ottimizzazione autovacuum nell'ottimizzazione intelligente monitora il rapporto di software bloat e regola le impostazioni in base alle esigenze per un utilizzo ottimale delle risorse. Gestisce in modo proattivo il processo di "pulizia" del database e riduce i problemi di prestazioni che i dati obsoleti possono causare.

La funzione di ottimizzazione delle scritture osserva la quantità e i modelli transazionali delle operazioni di scrittura. Regola in modo intelligente i parametri, ad esempio bgwriter_delay, checkpoint_completion_target, max_wal_size e min_wal_size. In questo modo, migliora le prestazioni e l'affidabilità del sistema, anche in carichi di scrittura elevati.

Quando si usa l'ottimizzazione intelligente, è possibile risparmiare tempo prezioso e risorse basandosi sul server flessibile di Database di Azure per PostgreSQL per mantenere le prestazioni ottimali dei database.

Come funziona l'ottimizzazione intelligente?

L'ottimizzazione intelligente è un processo di monitoraggio e analisi continuo che non solo apprende le caratteristiche del carico di lavoro, ma tiene traccia del carico corrente e dell'utilizzo delle risorse, ad esempio CPU o operazioni di I/O al secondo. Non disturba le normali operazioni del carico di lavoro dell'applicazione.

Il processo consente al database di regolare dinamicamente il carico di lavoro rilevando il rapporto di software bloat corrente, le prestazioni di scrittura e l'efficienza del checkpoint nell'istanza. Con queste informazioni dettagliate, l'ottimizzazione intelligente distribuisce azioni di ottimizzazione che migliorano le prestazioni del carico di lavoro ed evitano potenziali insidie.

Ottimizzazione di Autovacuum

L'ottimizzazione intelligente regola cinque parametri correlati a autovacuum: autovacuum_vacuum_scale_factor, autovacuum_cost_limit, autovacuum_naptime, autovacuum_vacuum_threshold e autovacuum_vacuum_cost_delay. Questi parametri regolano i componenti, ad esempio:

  • Frazione della tabella che imposta un processo VACUUM.
  • Limite di ritardo vuoto basato sui costi.
  • Intervallo di pausa tra le esecuzioni di autovacuum.
  • Numero minimo di tuple aggiornate o non aggiornate necessarie per avviare un processo di VACUUM.
  • Durata della pausa tra round di pulizia.

Importante

L'ottimizzazione intelligente modifica i parametri correlati all'autovacuum a livello di server, non a singoli livelli di tabella. Inoltre, se autovacuum è disattivato, l'ottimizzazione intelligente non può funzionare correttamente. Per ottimizzare il processo, è necessario abilitare la funzionalità autovacuum.

Anche se il daemon autovacuum attiva due operazioni (VACUUM e ANALYZE), l'ottimizzazione intelligente ottimizza solo il processo di VACUUM. Questa funzionalità attualmente non modifica il processo di ANALYZE, che raccoglie statistiche sul contenuto del sommario per consentire al server flessibile di Database di Azure per PostgreSQL di scegliere il piano di esecuzione delle query più adatto.

L'ottimizzazione intelligente include misure di sicurezza per misurare l'utilizzo delle risorse, ad esempio CPU e operazioni di I/O al secondo. Non aumenta l'attività autovacuum quando l'istanza è sotto carico elevato. In questo modo, l'ottimizzazione intelligente garantisce un equilibrio tra operazioni di pulizia efficaci e le prestazioni complessive del sistema.

Quando l'ottimizzazione intelligente ottimizza autovacuum, considera il software bloat medio del server usando le statistiche sulle tuple attive e inattive. Per ridurre il software bloat, l'ottimizzazione intelligente potrebbe ridurre i parametri come il fattore di scala o il naptime. Potrebbe attivare il processo di VACUUM prima e, se necessario, ridurre il ritardo tra i round.

D'altra parte, se il software bloat è minimo e il processo autovacuum è troppo aggressivo, l'ottimizzazione intelligente potrebbe aumentare parametri come ritardo, fattore di scala e naptime. Questo equilibrio riduce al minimo il software bloat e garantisce che il processo autovacuum usi in modo efficiente le risorse.

Ottimizzazione scritture

L'ottimizzazione intelligente regola quattro parametri correlati all'ottimizzazione delle scritture: bgwriter_delay, checkpoint_completion_target, max_wal_size e min_wal_size.

Il parametro bgwriter_delay determina la frequenza con cui il processo di scrittura in background viene risvegliato per pulire i buffer "dirty" (buffer nuovi o modificati). Il processo di scrittura in background è uno dei tre processi nel server flessibile di Database di Azure per PostgreSQL che gestisce le operazioni di scrittura. Gli altri son il processo di checkpoint e le scritture back-end (processi client standard, ad esempio le connessioni dell'applicazione).

Il ruolo principale del processo del writer in background consiste nell'alleviare il carico del processo del checkpoint principale e ridurre il carico delle scritture back-end. Il parametro bgwriter_delay regola la frequenza degli arrotondamenti del writer in background. Modificando questo parametro, è anche possibile ottimizzare le prestazioni delle query DML (Data Manipulation Language).

Il parametro checkpoint_completion_target fa parte del secondo meccanismo di scrittura supportato dal server flessibile di Database di Azure per PostgreSQL, in particolare il processo del checkpoint. I checkpoint si verificano a intervalli costanti definiti da checkpoint_timeout (a meno che non venga forzato superando lo spazio configurato). Per evitare di sovraccaricare il sistema di I/O con un picco di scritture di pagine, la scrittura di buffer dirty durante un checkpoint viene distribuita in un periodo di tempo. Il parametro checkpoint_completion_target controlla questa durata usando checkpoint_timeout per specificarla come frazione dell'intervallo di checkpoint.

Il valore predefinito di checkpoint_completion_target è 0,9 (a partire da PostgreSQL 14). Questo valore in genere funziona meglio, perché distribuisce il carico di I/O nel periodo di tempo massimo. In rari casi, i checkpoint potrebbero non terminare in tempo a causa di fluttuazioni impreviste nel numero di segmenti di registrazione write-ahead necessari. Il potenziale impatto sulle prestazioni è il motivo per cui checkpoint_completion_target è una metrica di destinazione per l'ottimizzazione intelligente.

Limitazioni e problemi noti

  • L'ottimizzazione intelligente viene effettuata solo in intervalli specifici. È possibile che la funzionalità non apporti modifiche.
  • L'ottimizzazione intelligente non regola le impostazioni ANALYZE.
  • L'ottimizzazione automatica è attualmente supportata per i livelli di calcolo server per utilizzo generico e ottimizzato per la memoria con quattro o più vCore. Il livello di calcolo del server con possibilità di burst non è supportato.

Passaggi successivi