Hohe Arbeitsspeicherauslastung in Azure Database for PostgreSQL – Flexibler Server

GILT FÜR: Azure Database for PostgreSQL – Flexible Server

In diesem Artikel werden allgemeine Szenarien und Ursachen vorgestellt, die zu einer hohen Speicherauslastung in azure Database für PostgreSQL flexiblen Server führen können.

In diesem Artikel wird Folgendes behandelt:

  • Informationen zu Problembehandlungsleitfäden zum Identifizieren und Abrufen von Empfehlungen zur Entschärfung von Ursachen.
  • Tools zur Identifizierung einer hohen Speicherauslastung.
  • Gründe für hohe Arbeitsspeicher- und Wartungsaktionen.

Leitfäden zur Problembehandlung

Die Verwendung der Anleitungen zur Problembehandlung, die im flexiblen Serverportal der Azure-Datenbank für PostgreSQL verfügbar ist, finden Sie die wahrscheinliche Ursache und Empfehlungen für das Problem mit hohem Arbeitsspeicher. Informationen dazu, wie Sie die Problembehandlungsleitfäden einrichten, finden Sie unter Einrichten von Problembehandlungsleitfäden.

Tools zur Identifizierung einer hohen Speicherauslastung

Betrachten Sie die folgenden Tools zur Identifizierung einer hohen Speicherauslastung.

Azure-Metriken

Verwenden Sie Azure-Metriken, um den Prozentsatz des genutzten Arbeitsspeichers für das bestimmte Datum und den Zeitrahmen zu überwachen.
Konfigurieren Sie für die proaktive Überwachung Warnungen zu den Metriken. Eine schrittweise Anleitung finden Sie unter Azure-Metriken.

Abfragespeicher

Im Abfragespeicher wird der Verlauf von Abfragen sowie deren Laufzeitstatistiken automatisch erfasst und für Ihre Überprüfung aufbewahrt.

Im Abfragespeicher können Informationen über Wait Events den Abfragelaufzeitstatistiken zugeordnet werden. Verwenden Sie den Abfragespeicher, um Abfragen zu identifizieren, die während des Abfragezeitraums viel Arbeitsspeicher verbrauchen.

Weitere Informationen zum Einrichten und Verwenden des Abfragespeichers finden Sie unter Abfragespeicher.

Gründe und Behebungsmaßnahmen

Die folgenden Gründe und Abhilfemaßnahmen helfen Ihnen dabei, eine hohe Speicherauslastung zu beheben.

Serverparameter

Die folgenden Serverparameter haben Einfluss auf den Speicherverbrauch und sollten überprüft werden:

Work_Mem

Dieser work_mem Parameter legt den Arbeitsspeicher fest, der von internen Sortiervorgängen und Hashtabellen genutzt werden soll, bevor temporäre Datenträgerdateien geschrieben werden. Der Parameter wird nicht pro Abfrage, sondern basierend auf der Anzahl der Sortier- und Hash-Operationen festgelegt.

Wenn die Arbeitsauslastung viele kurz ausgeführte Abfragen mit einfachen Verknüpfungen und minimalen Sortiervorgängen enthält, empfiehlt es sich, den Wert niedriger work_mem zu halten. Wenn es einige wenige aktive Abfragen mit komplexen Verknüpfungen und Sortierungen gibt, empfiehlt es sich, einen höheren Wert für work_mem festzulegen.

Es ist schwierig, den richtigen Wert von work_mem einzustellen. Wenn Sie eine hohe Arbeitsspeicherauslastung oder Probleme mit unzureichendem Arbeitsspeicher bemerken, können Sie den Wert für work_mem herabsetzen.

Eine sicherere Einstellung für work_mem ist work_mem = Total RAM / Max_Connections / 16

Der Standardwert von work_mem ist 4 MB. Über die Parameterseite im Azure-Portal können den work_mem Wert auf mehreren Ebenen, einschließlich der Serverebene, festlegen.

Es ist ratsam, den Speicherverbrauch in Spitzenzeiten zu überwachen.

Wenn Sie währenddessen Festplattensortierungen durchführen und viel Arbeitsspeicher verfügbar ist, erhöhen Sie work_mem schrittweise, bis der verfügbare und der verwendete Arbeitsspeicher in etwa ausgeglichen sind. Analog dazu verringern Sie work_mem, wenn der Speicherverbrauch hoch erscheint.

Maintenance_Work_Mem

maintenance_work_mem ist für Wartungsaufgaben gedacht, wie z.B. Vacuuming, Hinzufügen von Indizes oder Fremdschlüsseln. Die Speichernutzung in diesem Szenario erfolgt pro Sitzung.

Beispiel: ein Szenario, in dem drei Autovacuum-Worker ausgeführt werden.

Wenn der Wert für maintenance_work_mem auf 1 GB festgelegt ist, verwenden alle Sitzungen gemeinsam 3 GB des Arbeitsspeichers.

Ein hoher Wert für maintenance_work_mem, in Verbindung mit mehreren gleichzeitig ausgeführten Sitzungen (Staubsaugen/Indexerstellung/Hinzufügen von Fremdschlüsseln) kann zu einer hohen Speicherauslastung führen. Der maximal zulässige Wert für den maintenance_work_mem Serverparameter in der Azure-Datenbank für den flexiblen Server für PostgreSQL beträgt 2 GB.

Freigegebene Puffer

Der Parameter shared_buffers bestimmt, wieviel Speicher dem Server zum Zwischenspeichern von Daten zugewiesen wird. Das Ziel gemeinsam genutzter Puffer besteht darin, die DISK-E/A zu reduzieren.

Eine angemessene Einstellung für freigegebene Puffer liegt bei 25 % des RAM. Das Festlegen eines Wertes von über 40 % des RAM wird für die meisten gängigen Workloads nicht empfohlen.

Max. Anzahl von Verbindungen

Alle neuen und leerlauffähige Verbindungen in einer Azure-Datenbank für Flexible Serverdatenbank für PostgreSQL verbrauchen bis zu 2 MB Arbeitsspeicher. Zum Überwachen von Verbindungen kann die folgende Abfrage verwendet werden:

select count(*) from pg_stat_activity;

Wenn die Anzahl der Verbindungen zu einer Datenbank hoch ist, steigt auch der Speicherverbrauch.

In Situationen mit vielen Datenbankverbindungen sollten Sie die Verwendung eines Verbindungspoolers wie PgBouncer in Betracht ziehen.

Weitere Informationen über PgBouncer erhalten Sie unter:

Verbindungspooling.

Bewährte Methoden.

Azure Database for PostgreSQL flexible Server bietet PgBouncer als integrierte Verbindungspoollösung an. Weitere Informationen finden Sie unter PgBouncer.

EXPLAIN ANALYZE

Nachdem speicheraufwändige Abfragen vom Abfragespeicher identifiziert wurden, verwenden Sie EXPLAIN und EXPLAIN ANALYZE, um diese weiter zu untersuchen und zu optimieren.

Weitere Informationen zum Befehl EXPLAIN erhalten Sie unter "Erklären".