Automatische Speicherverwaltung

Wählen Sie eine Dokumentationsversion aus:

AlloyDB Omni verwendet adaptive Algorithmen für die Arbeitsspeicherverwaltung.

Sie können beim Starten von AlloyDB Omni das obere Limit des freigegebenen Puffers festlegen. Wenn Sie das obere Limit nicht festlegen, wird die Größe des Sicherungsspeichers für freigegebene Puffer in AlloyDB Omni automatisch auf 80% des Systemspeichers festgelegt. Die anfängliche Sicherungsgröße des gemeinsamen Puffers kann sich von der Obergrenze unterscheiden.

AlloyDB Omni besteht aus einem intelligenten Arbeitsspeicher-Worker, der den Arbeitsspeicherstatus ständig überwacht und die Größe des Backups des freigegebenen Puffers für eine optimale Leistung beim Zwischenspeichern von Daten anpasst.

Automatischer Arbeitsspeicher

Standardmäßig ist der Parameter shared_buffers auf 0 festgelegt. Das ist ein spezieller Wert, mit dem die Obergrenze für die Größe des shared buffers-Cache auf 80% des Systemspeichers festgelegt wird. AlloyDB Omni beginnt bei 10% des shared_buffers-Höchstbetrags. Wenn shared_buffers durch einen benutzerdefinierten Wert überschrieben wird, berücksichtigt AlloyDB Omni den Wert als Obergrenze für die Größe von shared_buffers und beginnt mit der angegebenen benutzerdefinierten Größe.

Wenn Sie eine benutzerdefinierte Größe angeben möchten, bearbeiten Sie die Konfigurationsdatei postgresql.conf. Sie können beispielsweise shared_buffers auf 1GB festlegen, indem Sie eine der folgenden Methoden verwenden:

  • docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image

  • docker run --name CONTAINER_NAME $image -c shared_buffers=1GB

    Ersetzen Sie CONTAINER_NAME durch den Namen, den Sie dem AlloyDB Omni-Container bei der Installation zugewiesen haben.

Abfrageleistung optimieren

Der Standardwert des Parameters shared_buffers ist für die meisten Szenarien geeignet.

Sie können den Wert jedoch für eine optimale Leistung anpassen. Wenn Sie den Standardwert von shared_buffers verwenden, um die Obergrenze für den freigegebenen Puffer abzuleiten, verwenden Sie den cgroup-Wert memory.max, um die Berechnung zu beeinflussen.

Arbeitsspeicher der spaltenbasierten Engine

Der dynamische shared_buffers ist unabhängig vom Arbeitsspeicher der spaltenbasierten Engine. Wenn die spaltenbasierte Engine aktiviert ist, kann die dynamische shared_buffers-Größe abgeleitet werden, indem die von der spaltenbasierten Engine verwendete Speichermenge von 80% des Gesamtspeichers subtrahiert wird, der dem System oder der Cgroup zur Verfügung steht.

Große Seiten

Huge Pages verbessern die Datenbankleistung. AlloyDB Omni verwaltet Huge Pages nach Möglichkeit explizit. Andernfalls wird die THP-Funktion (Transparent Huge Pages) des Betriebssystems verwendet. Wenn keiner der beiden Huge-Page-Typen unterstützt wird, greift AlloyDB Omni auf 4-KB-Seiten zurück und gibt eine Warnung in den Docker-Containerlogs docker logs $container_name mit einer spezifischen Anleitung zum Einrichten von Huge Pages aus. Eine Anleitung zum Starten eines Containers finden Sie unter AlloyDB Omni starten.

Die Warnung sieht in etwa so aus:

HINT:  Please either execute the all-in-one setup script:
          docker run --rm --privileged $image setup-host
        OR manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages=1048576

Automatische Speicherverwaltung zur Laufzeit

AlloyDB Omni überwacht ständig die Systemlast und passt den Arbeitsspeicherverbrauch an, um die Leistung zu verbessern. Konkret kann Folgendes passieren:

Dynamische shared_buffers-Größenänderung
AlloyDB Omni erhöht die dynamische shared_buffers-Größe, wenn der Systemspeicherverbrauch niedrig ist, und verringert die Größe, wenn der Systemspeicherverbrauch hoch ist. So überwachen Sie die dynamische Größe von shared_buffers:
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
Beenden einer PostgreSQL-Verbindung, wenn das System nur noch sehr wenig Arbeitsspeicher hat
Wenn AlloyDB Omni erkennt, dass das System nur noch sehr wenig Arbeitsspeicher hat, werden die PostgreSQL-Verbindungen mit dem höchsten Arbeitsspeicherverbrauch gelöscht, bis die Last wieder ein angemessenes Niveau erreicht. Wenn ein solches Ereignis eintritt, protokolliert AlloyDB Omni Folgendes in den Docker-Containerlogs:
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)