Informazioni sulla gestione automatica della memoria

Select a documentation version:

AlloyDB Omni utilizza algoritmi adattivi per la gestione della memoria.

Puoi decidere il limite superiore del buffer condiviso all'avvio di AlloyDB Omni. Se non imposti il limite superiore, AlloyDB Omni imposta automaticamente le dimensioni di backing del buffer condiviso sull'80% della memoria di sistema. Le dimensioni di backing iniziali del buffer condiviso possono essere diverse dal limite superiore.

AlloyDB Omni è costituito da un worker di memoria intelligente che monitora costantemente lo stato della memoria e ottimizza le dimensioni di backing del buffer condiviso per ottenere prestazioni ottimali durante la memorizzazione nella cache dei dati.

Memoria automatica

Per impostazione predefinita, il parametro shared_buffers è impostato su 0, un valore speciale che imposta il limite superiore delle dimensioni della cache shared buffers sull'80% della memoria di sistema. AlloyDB Omni inizia con il 10% del limite superiore di shared_buffers. Se shared_buffers viene sostituito da un valore personalizzato, AlloyDB Omni rispetta il valore come limite superiore delle dimensioni di shared_buffers e inizia con le dimensioni personalizzate specificate.

Per specificare una dimensione personalizzata, puoi impostare shared_buffers su 1GB. Il metodo dipende dal tipo di deployment:

Per le installazioni basate su Linux (incluso RPM), puoi impostare il parametro shared_buffers utilizzando uno dei seguenti metodi. Dopo aver applicato la modifica, devi riavviare il servizio.

  • Opzione 1: modifica il file di configurazione

    1. Apri il file postgresql.conf per modificarlo.

    2. Aggiungi o modifica la seguente riga:

      shared_buffers = 1GB
      
    3. Salva il file e riavvia il servizio AlloyDB Omni:

      sudo systemctl restart alloydbomniMAJOR_VERSION

      Sostituisci MAJOR_VERSION con la versione principale dell'installazione di AlloyDB Omni, ad esempio 18.

  • Opzione 2: utilizza il comando ALTER SYSTEM

    1. Connettiti all'istanza del database utilizzando un client SQL.

    2. Esegui questo comando:

      ALTER SYSTEM SET shared_buffers = '1GB';
      
    3. Riavvia il servizio AlloyDB Omni:

      sudo systemctl restart alloydbomniMAJOR_VERSION

      Sostituisci MAJOR_VERSION con la versione principale dell'installazione di AlloyDB Omni, ad esempio 18.

Ottimizza le prestazioni delle query

Il valore predefinito del parametro shared_buffers funziona per gli scenari comuni.

Tuttavia, puoi ottimizzare il valore per ottenere prestazioni ottimali. Se scegli di utilizzare il valore predefinito di shared_buffers per dedurre il limite superiore del buffer condiviso, utilizza il valore memory.max del cgroup per influenzare il calcolo.

Memoria del motore colonnare

Il shared_buffers dinamico è indipendente dalla memoria del motore colonnare. Quando il motore colonnare è abilitato, le dimensioni di shared_buffers dinamico possono essere derivate sottraendo la quantità di memoria utilizzata dal motore colonnare dall'80% della memoria totale disponibile per il sistema o il cgroup.

Huge page

Le huge page migliorano le prestazioni del database. AlloyDB Omni gestisce le huge page in modo esplicito, se possibile, altrimenti si basa sulla funzionalità di huge page trasparenti (THP) del sistema operativo. Se non è supportato alcun tipo di huge page, AlloyDB Omni esegue il fallback alla pagina 4k e stampa un avviso nei log del database con istruzioni specifiche per configurare le huge page.

L'avviso è simile al seguente:


HINT:  Please manually execute:
          echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
          sudo sysctl -w vm.nr_overcommit_hugepages="$(/usr/bin/awk '/MemTotal/ { printf "%.0f", $2/1024 }' /proc/meminfo)"

Gestione automatica della memoria in fase di runtime

AlloyDB Omni monitora costantemente il carico del sistema e regola il consumo di memoria per migliorare le prestazioni. In particolare, potresti osservare quanto segue:

Modifica delle dimensioni di shared_buffers dinamico
AlloyDB Omni aumenta le dimensioni di shared_buffers dinamico quando il consumo di memoria di sistema è basso e le diminuisce quando il consumo di memoria di sistema è elevato. L'estensione `g_memory` è inclusa nella distribuzione di AlloyDB Omni. Per abilitarla e monitorare le dimensioni di `shared_buffers` dinamico, esegui questi comandi:
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
Terminazione di una connessione PostgreSQL quando la memoria di sistema è estremamente bassa
Quando AlloyDB Omni rileva che la memoria di sistema è estremamente bassa, tenta di eliminare le connessioni PostgreSQL che consumano più memoria finché il carico non torna a un livello ragionevole. Quando si verifica un evento di questo tipo, AlloyDB Omni registra una voce simile all'esempio seguente nei log del database:
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)