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 la sauvegarde du tampon partagé 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 worker de mémoire intelligent qui surveille en permanence l'état de la mémoire et ajuste la taille de la 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 shared_buffers
et commence avec cette 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 lorsque vous l'avez installé.
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 memory.max
du cgroup 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 colonnes est activé, la taille dynamique de shared_buffers
peut être dérivée en soustrayant la quantité de mémoire utilisée par le moteur de colonnes de 80% de la mémoire totale disponible pour le système ou le cgroup.
Huge Pages
Les pages énormes améliorent les performances de la base de données. AlloyDB Omni gère explicitement les hugepages si possible, sinon il s'appuie sur la fonctionnalité de hugepages transparents (THP) du système d'exploitation. Si aucun type de page de grande taille n'est pris en charge, AlloyDB Omni revient à la page de 4 ko et affiche un avertissement dans les journaux du conteneur Docker docker logs $container_name
avec des instructions spécifiques pour configurer les pages de grande taille. 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 constater les éléments suivants:
- Modification dynamique de la taille
shared_buffers
- AlloyDB Omni augmente la taille dynamique de
shared_buffers
lorsque la consommation de mémoire système est faible, et la réduit lorsque la consommation de mémoire système est élevée. Pour surveiller la taille dynamique deshared_buffers
, utilisez:CREATE EXTENSION IF NOT EXISTS g_memory; SELECT g_dynamic_shared_size();
- Arrêt d'une connexion PostgreSQL lorsque le système manque extrêmement de mémoire
- Lorsque AlloyDB Omni détecte que le système manque extrêmement 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 consigne les éléments suivants dans les journaux des conteneurs Docker:
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)