Automatische Speicherverwaltung

Wählen Sie eine Dokumentationsversion aus:

AlloyDB Omni verwendet adaptive Algorithmen für die Speicherverwaltung.

Sie können die Obergrenze des gemeinsamen Zwischenspeichers beim Starten von AlloyDB Omni festlegen. Wenn Sie die Obergrenze nicht festlegen, setzt AlloyDB Omni die Größe des gemeinsamen Zwischenspeichers automatisch auf 80% des Systemspeichers. Die anfängliche Sicherungsgröße des gemeinsamen Zwischenspeichers kann von der Obergrenze abweichen.

AlloyDB Omni enthält einen intelligenten Arbeitsspeicher-Worker, der den Arbeitsspeicherstatus ständig überwacht und die Größe des gemeinsamen Zwischenspeichers für eine optimale Leistung beim Caching von Daten anpasst.

Automatischer Speicher

Standardmäßig ist der Parameter shared_buffers auf 0 festgelegt. Das ist ein spezieller Wert, der die Obergrenze der Größe des shared buffers-Cache auf 80% des Systemspeichers festlegt. AlloyDB Omni beginnt bei 10% der Obergrenze von shared_buffers. 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 dieser angegebenen benutzerdefinierten Größe.

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

  • 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 gängige 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 gemeinsamen Zwischenspeicher 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 gesamten für das System oder die cgroup verfügbaren Speichers abgezogen wird.

Huge Pages

Huge Pages verbessern die Datenbankleistung. AlloyDB Omni verwaltet Huge Pages nach Möglichkeit explizit. Andernfalls wird die Funktion „Transparent Huge Pages“ (THP) des Betriebssystems verwendet. Wenn keiner der beiden Huge-Page-Typen unterstützt wird, greift AlloyDB Omni auf 4k-Seiten zurück und gibt in den Docker-Container-Logs docker logs $container_name eine Warnung mit einer 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 die Systemlast kontinuierlich und passt den Arbeitsspeicherverbrauch an, um die Leistung zu verbessern. Konkret kann Folgendes auftreten:

Dynamische Änderung der shared_buffers-Größe
AlloyDB Omni erhöht die Größe des dynamischen shared_buffers, wenn der Systemspeicherverbrauch niedrig ist, und verringert die Größe, wenn der Systemspeicherverbrauch hoch ist. So überwachen Sie die dynamische shared_buffers-Größe:
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
Beendigung einer PostgreSQL-Verbindung, wenn das System extrem wenig Arbeitsspeicher hat
Wenn AlloyDB Omni feststellt, dass das System extrem wenig Arbeitsspeicher hat, versucht es, die PostgreSQL-Verbindungen mit dem höchsten Arbeitsspeicherverbrauch zu löschen, bis die Last wieder auf ein angemessenes Niveau sinkt. Wenn ein solches Ereignis eintritt, protokolliert AlloyDB Omni Folgendes in den Docker-Container-Logs:
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)