À propos de la gestion automatique de la mémoire

Sélectionnez une version de la documentation :

AlloyDB Omni utilise des algorithmes adaptatifs pour la gestion de la mémoire.

Vous pouvez définir la limite supérieure de la mémoire tampon partagée au démarrage d'AlloyDB Omni. Si vous ne définissez pas de limite supérieure, AlloyDB Omni définit automatiquement la taille de sauvegarde de la mémoire tampon partagée sur 80 % de la mémoire système. La taille de sauvegarde initiale de la mémoire tampon partagée peut être différente de la limite supérieure.

AlloyDB Omni se compose d'un nœud de calcul de mémoire intelligent qui surveille en permanence l'état de la mémoire et ajuste la taille de sauvegarde de la mémoire tampon partagée pour optimiser les performances lors de la mise en cache des données.

Mémoire automatique

Par défaut, le paramètre shared_buffers est défini sur 0, une valeur spéciale qui définit la limite supérieure de la taille du cache shared buffers sur 80 % de la mémoire système. AlloyDB Omni commence à 10 % de la limite supérieure de shared_buffers. Si shared_buffers est remplacé par une valeur personnalisée, AlloyDB Omni respecte cette valeur comme limite supérieure de la taille de shared_buffers et commence avec la taille personnalisée spécifiée.

Pour spécifier une taille personnalisée, modifiez le fichier de configuration postgresql.conf. Par exemple, vous pouvez définir shared_buffers sur 1GB à l'aide de l'une des méthodes suivantes :

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

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

    Remplacez CONTAINER_NAME par le nom que vous avez attribué au conteneur AlloyDB Omni lors de son installation.

Optimiser les performances des requêtes

La valeur par défaut du paramètre shared_buffers fonctionne dans les scénarios courants.

Toutefois, vous pouvez ajuster la valeur pour optimiser les performances. Si vous choisissez de vous appuyer sur la valeur par défaut de shared_buffers pour déduire la limite supérieure de la mémoire tampon partagée, utilisez la valeur memory.max du cgroup pour influencer le calcul.

Mémoire du moteur de données en colonnes

La mémoire dynamique shared_buffers est indépendante de la mémoire du moteur de données en colonnes. Lorsque le moteur de données en colonnes est activé, la taille de shared_buffers dynamique peut être dérivée en soustrayant la quantité de mémoire utilisée par le moteur de données en colonnes de 80 % de la mémoire totale disponible pour le système ou le cgroup.

Huge Pages

Les Huge Pages améliorent les performances de la base de données. AlloyDB Omni gère explicitement les Huge Pages si possible. Sinon, il s'appuie sur la fonctionnalité Transparent Huge Pages (THP) du système d'exploitation. Si aucun type de Huge Page n'est compatible, AlloyDB Omni revient à la page 4k et affiche un avertissement dans les journaux du conteneur Docker docker logs $container_name avec des instructions spécifiques pour configurer les Huge Pages. Pour savoir comment démarrer un conteneur, consultez Démarrer AlloyDB Omni.

L'avertissement ressemble à ceci :

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

Gestion automatique de la mémoire au moment de l'exécution

AlloyDB Omni surveille en permanence la charge du système et ajuste sa consommation de mémoire pour améliorer les performances. Plus précisément, vous pouvez observer les éléments suivants :

Modification de la taille de shared_buffers dynamique
AlloyDB Omni augmente la taille de shared_buffers dynamique lorsque la consommation de mémoire du système est faible et la diminue lorsque la consommation de mémoire du système est élevée. Pour surveiller la taille de shared_buffers dynamique, utilisez :
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
Arrêt d'une connexion PostgreSQL lorsque le système manque de mémoire
Lorsqu'AlloyDB Omni détecte que le système manque de mémoire, il tente de supprimer les connexions PostgreSQL les plus gourmandes en mémoire jusqu'à ce que la charge revienne à un niveau raisonnable. Lorsqu'un tel événement se produit, AlloyDB Omni enregistre les informations suivantes dans les journaux du conteneur Docker :
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)