Condividi tramite


Utilizzo elevato della memoria in Database di Azure per PostgreSQL - Server flessibile

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

Questo articolo presenta scenari e cause radice comuni che potrebbero causare un utilizzo elevato della memoria in Database di Azure per PostgreSQL server flessibile.

In questo articolo, imparerai a:

  • Informazioni sulle guide alla risoluzione dei problemi per identificare e ottenere raccomandazioni per attenuare le cause radice.
  • Strumenti per identificare l'utilizzo elevato della memoria.
  • Motivi di memoria elevata e azioni correttive.

Guide alla risoluzione dei problemi

È possibile trovare le guide alla risoluzione dei problemi di funzionalità disponibili nel portale del server flessibile Database di Azure per PostgreSQL la probabile causa radice e le raccomandazioni per ridurre lo scenario di memoria elevata. Come configurare le guide alla risoluzione dei problemi per usarle, seguire le guide alla risoluzione dei problemi di installazione.

Strumenti per identificare l'utilizzo elevato della memoria

Prendere in considerazione gli strumenti seguenti per identificare l'utilizzo elevato della memoria.

Metriche di Azure

Usare Metriche di Azure per monitorare la percentuale di memoria in uso per l'intervallo di data e ora definito.
Per il monitoraggio proattivo, configurare gli avvisi sulle metriche. Per indicazioni dettagliate, vedere Metriche di Azure.

Archivio query

Query Store acquisisce automaticamente la cronologia delle query e le relative statistiche di runtime e le mantiene per la revisione.

Query Store può correlare le informazioni sugli eventi di attesa con le statistiche di runtime delle query. Usare Query Store per identificare le query con un utilizzo elevato di memoria durante il periodo di interesse.

Per altre informazioni sulla configurazione e sull'uso di Query Store, vedere Query Store.

Motivi e azioni correttive

Prendere in considerazione i motivi seguenti e le azioni correttive per la risoluzione di un utilizzo elevato della memoria.

Parametri del server

I parametri del server seguenti influisce sull'utilizzo della memoria e devono essere esaminati:

Work_Mem

Il work_mem parametro specifica la quantità di memoria da utilizzare dalle operazioni di ordinamento interne e dalle tabelle hash prima di scrivere nei file temporanei del disco. Non è invece basato su query, ma viene impostato in base al numero di operazioni di ordinamento e hash.

Se il carico di lavoro ha molte query a esecuzione breve con semplici join e operazioni di ordinamento minime, è consigliabile mantenere inferiore work_mem. Se sono presenti alcune query attive con join e ordinamenti complessi, è consigliabile impostare un valore superiore per work_mem.

È difficile ottenere il valore giusto work_mem . Se si nota un utilizzo elevato della memoria o problemi di memoria insufficiente, prendere in considerazione la riduzione di work_mem.

Un'impostazione più sicura per work_mem è work_mem = Total RAM / Max_Connections / 16

Valore predefinito = work_mem 4 MB. È possibile impostare il work_mem valore su più livelli, incluso a livello di server tramite la pagina dei parametri nella portale di Azure.

Una buona strategia consiste nel monitorare il consumo di memoria durante i periodi di picco.

Se l'ordinamento dei dischi avviene durante questo periodo e la memoria inutilizzata è elevata, aumentare work_mem gradualmente fino a raggiungere un buon equilibrio tra memoria disponibile e memoria usata in modo analogo, se l'uso della memoria è elevato, ridurre work_mem.

Maintenance_Work_Mem

maintenance_work_mem è per attività di manutenzione come il vuoto, l'aggiunta di indici o chiavi esterne. L'utilizzo della memoria in questo scenario è per sessione.

Si consideri ad esempio uno scenario in cui sono in esecuzione tre ruoli di lavoro autovacuum.

Se maintenance_work_mem è impostato su 1 GB, tutte le sessioni combinate useranno 3 GB di memoria.

Un valore elevato maintenance_work_mem insieme a più sessioni in esecuzione per la creazione di vuoto/indicizzazione/l'aggiunta di chiavi esterne può causare un utilizzo elevato della memoria. Il valore massimo consentito per il parametro server maintenance_work_mem in Database di Azure per PostgreSQL server flessibile è 2 GB.

Buffer condivisi

Il shared_buffers parametro determina la quantità di memoria dedicata al server per la memorizzazione nella cache dei dati. L'obiettivo dei buffer condivisi è ridurre le operazioni di I/O SU DISCO.

Un'impostazione ragionevole per i buffer condivisi è il 25% della RAM. L'impostazione di un valore maggiore del 40% della RAM non è consigliata per i carichi di lavoro più comuni.

Numero massimo di connessioni

Tutte le connessioni nuove e inattive in un database server flessibile Database di Azure per PostgreSQL utilizzano fino a 2 MB di memoria. Un modo per monitorare le connessioni consiste nell'usare la query seguente:

select count(*) from pg_stat_activity;

Quando il numero di connessioni a un database è elevato, aumenta anche il consumo di memoria.

In situazioni in cui sono presenti molte connessioni di database, prendere in considerazione l'uso di un pool di connessioni come PgBouncer.

Per altri dettagli su PgBouncer, vedere:

pooler Connessione ion.

Procedure consigliate.

Database di Azure per PostgreSQL server flessibile offre PgBouncer come soluzione di pool di connessioni predefinita. Per altre informazioni, vedere PgBouncer.

Spiegare l'analisi

Dopo aver identificato query con utilizzo elevato di memoria da Query Store, usare EXPLAIN e EXPLAIN ANALYZE per esaminarle e ottimizzarle ulteriormente.

Per altre informazioni sul comando EXPLAIN , vedere Spiega piano.