Dela via


Hög minnesanvändning i Azure Database for PostgreSQL – flexibel server

GÄLLER FÖR: Azure Database for PostgreSQL – flexibel server

Den här artikeln beskriver vanliga scenarier och rotorsaker som kan leda till hög minnesanvändning i Azure Database for PostgreSQL – flexibel server.

I den här artikel får du lära dig om:

  • Om felsökningsguider för att identifiera och få rekommendationer för att minimera rotorsaker.
  • Verktyg för att identifiera hög minnesanvändning.
  • Orsaker till hög minnes- och reparationsåtgärder.

Felsökningsguider

Med hjälp av funktionsfelsökningsguiderna som är tillgängliga på Azure Database for PostgreSQL–portalen för flexibel server kan du hitta den troliga rotorsaken och rekommendationerna för att minimera hög minnesanvändning. Så här konfigurerar du felsökningsguiderna för att använda dem genom att följa felsökningsguiderna för installation.

Verktyg för att identifiera hög minnesanvändning

Överväg följande verktyg för att identifiera hög minnesanvändning.

Azure-mått

Använd Azure Metrics för att övervaka procentandelen minne som används för det bestämda datumet och tidsramen.
Konfigurera aviseringar för måtten för proaktiv övervakning. Stegvis vägledning finns i Azure Metrics.

Query Store

Query Store samlar automatiskt in historiken för frågor och deras körningsstatistik, och den behåller dem för din granskning.

Query Store kan korrelera information om väntehändelser med frågekörningstidsstatistik. Använd Query Store för att identifiera frågor som har hög minnesförbrukning under intresseperioden.

Mer information om hur du konfigurerar och använder Query Store finns i Query Store.

Orsaker och åtgärdsåtgärder

Överväg följande orsaker och åtgärdsåtgärder för att lösa hög minnesanvändning.

Serverparametrar

Följande serverparametrar påverkar minnesförbrukningen och bör granskas:

Work_Mem

Parametern work_mem anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler. Det är inte per fråga snarare, det anges baserat på antalet sorterings- och hashåtgärder.

Om arbetsbelastningen har många korta frågor med enkla kopplingar och minimala sorteringsåtgärder rekommenderar vi att du behåller lägre work_mem. Om det finns några aktiva frågor med komplexa kopplingar och sorteringar rekommenderar vi att du anger ett högre värde för work_mem.

Det är svårt att få värdet av work_mem rätt. Om du märker problem med hög minnesanvändning eller minnesbrist bör du överväga att minska work_mem.

En säkrare inställning för work_mem är work_mem = Total RAM / Max_Connections / 16

Standardvärdet work_mem = 4 MB. Du kan ange work_mem värdet på flera nivåer, inklusive på servernivå via parametersidan i Azure-portalen.

En bra strategi är att övervaka minnesförbrukningen under tider med hög belastning.

Om disksortering sker under den här tiden och det finns gott om oanvänt minne ökar work_mem du gradvis tills du kan nå en bra balans mellan tillgängligt och använt minne på samma sätt, om minnesanvändningen ser hög ut, minska work_mem.

Maintenance_Work_Mem

maintenance_work_mem är till för underhållsaktiviteter som att dammsuga, lägga till index eller sekundärnycklar. Minnesanvändningen i det här scenariot gäller per session.

Tänk dig till exempel ett scenario där det finns tre autorensningsarbetare som körs.

Om maintenance_work_mem är inställt på 1 GB använder alla sessioner tillsammans 3 GB minne.

Ett högt maintenance_work_mem värde tillsammans med flera sessioner som körs för att dammsuga/indexera/lägga till sekundärnycklar kan orsaka hög minnesanvändning. Det högsta tillåtna maintenance_work_mem värdet för serverparametern i Azure Database for PostgreSQL – flexibel server är 2 GB.

Delade buffertar

Parametern shared_buffers avgör hur mycket minne som är dedikerat till servern för cachelagring av data. Målet med delade buffertar är att minska disk-I/O.

En rimlig inställning för delade buffertar är 25 % av RAM-minnet. Att ange ett värde på större än 40 % av RAM-minnet rekommenderas inte för de vanligaste arbetsbelastningarna.

Maximalt antal anslutningar

Alla nya och inaktiva anslutningar i en flexibel Azure Database for PostgreSQL-serverdatabas förbrukar upp till 2 MB minne. Ett sätt att övervaka anslutningar är att använda följande fråga:

select count(*) from pg_stat_activity;

När antalet anslutningar till en databas är högt ökar även minnesförbrukningen.

I situationer där det finns många databasanslutningar bör du överväga att använda en anslutningspool som PgBouncer.

Mer information om PgBouncer finns i:

Anslut ion Pooler.

Metodtips.

Azure Database for PostgreSQL – flexibel server erbjuder PgBouncer som en inbyggd lösning för anslutningspooler. Mer information finns i PgBouncer.

Förklara analysera

När höga minneskrävande frågor har identifierats från Query Store använder du EXPLAIN och EXPLAIN ANALYZE för att undersöka ytterligare och finjustera dem.

Mer information om kommandot EXPLAIN finns i Förklara plan.