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 la mémoire tampon partagée sur 80% de la mémoire système. La taille de sauvegarde initiale du tampon partagé 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 du tampon partagé pour optimiser les performances lors de la mise en cache des données.

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 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 :
docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $imagedocker 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 convient aux scénarios courants.
Toutefois, vous pouvez ajuster la valeur pour obtenir des performances optimales.
Si vous choisissez de vous fier à 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
Le shared_buffers dynamique est indépendant de la mémoire du moteur de données en colonnes. Lorsque le moteur de données en colonnes est activé, la taille dynamique de shared_buffers peut être calculé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 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 volumineuse n'est compatible, AlloyDB Omni utilise une page de 4 ko et affiche un avertissement dans les journaux du conteneur Dockerdocker logs $container_name avec des instructions spécifiques pour configurer des pages volumineuses. 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 lors 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 dynamique de la taille de
shared_buffers - AlloyDB Omni augmente la taille dynamique de
shared_bufferslorsque la consommation de mémoire système est faible, et la diminue lorsque la consommation de mémoire système 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 la mémoire du système est extrêmement faible
-
Lorsqu'AlloyDB Omni détecte que la mémoire du système est extrêmement faible, il tente de supprimer les connexions PostgreSQL qui consomment le plus de mémoire jusqu'à ce que la charge revienne à un niveau raisonnable. Lorsqu'un tel événement se produit, AlloyDB Omni consigne une entrée semblable à l'exemple suivant dans les journaux du conteneur Docker :
WARNING: Sending SIGTERM to pid=12345 NSpid=67890 (VA size = 1024MB) (RSS size = 512MB)