À 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 stockage de la mémoire tampon partagée sur 80 % de la mémoire système. La taille de stockage initiale de la mémoire tampon partagée peut être différente de la limite supérieure.

AlloyDB Omni se compose d'un worker de mémoire intelligent qui surveille en permanence l'état de la mémoire et ajuste la taille de sauvegarde du tampon partagé 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, qui est une valeur spéciale qui définit la limite supérieure de la taille du cache shared buffers à 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 shared_buffers et commence par cette taille personnalisée spécifiée.

Pour spécifier une taille personnalisée, vous pouvez définir shared_buffers sur 1GB. La méthode dépend de votre type de déploiement :

Pour les installations basées sur Linux (y compris RPM), vous pouvez définir le paramètre shared_buffers à l'aide de l'une des méthodes suivantes. Une fois la modification appliquée, vous devez redémarrer le service.

  • Option 1 : Modifier le fichier de configuration

    1. Ouvrez le fichier postgresql.conf pour le modifier.

    2. Ajoutez ou modifiez la ligne suivante :

      shared_buffers = 1GB
      
    3. Enregistrez le fichier et redémarrez le service AlloyDB Omni :

      sudo systemctl restart alloydbomniMAJOR_VERSION

      Remplacez MAJOR_VERSION par la version majeure de votre installation AlloyDB Omni, par exemple 18.

  • Option 2 : Utiliser la commande ALTER SYSTEM

    1. Connectez-vous à votre instance de base de données à l'aide d'un client SQL.

    2. Exécutez la commande suivante :

      ALTER SYSTEM SET shared_buffers = '1GB';
      
    3. Redémarrez le service AlloyDB Omni :

      sudo systemctl restart alloydbomniMAJOR_VERSION

      Remplacez MAJOR_VERSION par la version majeure de votre installation AlloyDB Omni, par exemple 18.

Optimiser les performances des requêtes

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

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

Mémoire du moteur de données en colonnes

La shared_buffers dynamique 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 dynamique shared_buffers peut être obtenue en soustrayant la quantité de mémoire utilisée par le moteur de données en colonnes à 80 % de la mémoire totale disponible pour le système ou le cgroup.

Huge pages

Les pages volumineuses 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 page énorme n'est compatible, AlloyDB Omni revient à une page de 4 ko et affiche un avertissement dans les journaux de base de données avec des instructions spécifiques pour configurer les pages énormes.

L'avertissement ressemble à ce qui suit :


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)"

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 pourrez observer les éléments suivants :

Modification dynamique de la taille de shared_buffers
AlloyDB Omni augmente la taille dynamique de shared_buffers lorsque la consommation de mémoire système est faible et la diminue lorsqu'elle est élevée. L'extension `g_memory` est incluse dans la distribution AlloyDB Omni. Pour l'activer et surveiller la taille dynamique de `shared_buffers`, exécutez les commandes suivantes :
CREATE EXTENSION IF NOT EXISTS g_memory;
SELECT g_dynamic_shared_size();
Arrêt d'une connexion PostgreSQL lorsque le système manque cruellement de mémoire
Lorsqu'AlloyDB Omni détecte que le système manque cruellement 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 une entrée semblable à l'exemple suivant dans les journaux de la base de données :
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)