Cette page explique comment provisionner, configurer et utiliser la mise en cache sur disque dans AlloyDB Omni pour améliorer les performances de votre installation AlloyDB Omni.
En plus des tampons partagés en mémoire standards de PostgreSQL, le cache disque d'AlloyDB Omni permet de stocker des tampons sur un stockage rapide, tel que des SSD (disques SSD). La mise en cache sur disque accélère la récupération des données dans les installations AlloyDB Omni dont les répertoires de données se trouvent sur un stockage plus lent.
Comme les tampons partagés PostgreSQL, le cache disque d'AlloyDB Omni n'est pas persistant, ce qui signifie que les données mises en cache sont perdues au redémarrage.
Par défaut, le cache de disque AlloyDB Omni utilise tout l'espace de stockage indiqué par le système de fichiers. Vous pouvez définir la quantité de stockage réservée à la mise en cache des données à l'aide du paramètre omni_disk_cache_file_size
.
Activer le cache disque AlloyDB Omni
La procédure à suivre pour activer le cache disque pour AlloyDB Omni dépend de l'exécution d'AlloyDB Omni dans un conteneur ou sur un cluster Kubernetes.
Serveur unique
Provisionner des disques et créer un système de fichiers
Pour le cache de disque AlloyDB Omni, vous créez un système de fichiers sur un ou plusieurs disques, puis vous l'installez dans un conteneur avec AlloyDB Omni. Vous pouvez également utiliser des utilitaires tels que mdadm
ou lvm
pour mettre en commun la capacité de plusieurs disques et utiliser n'importe quel système de fichiers.
Les étapes suivantes montrent comment utiliser lvm
et ext4
sur une instance Ubuntu Compute Engine avec des SSD NVMe.
Créez un groupe de volumes à partir de tous les appareils physiques disponibles:
nvme_prefix="STORAGE_PREFIX" nvme_list=$(ls "$nvme_prefix"*) sudo vgcreate VOLUME_GROUP ${nvme_list}
Remplacez les éléments suivants :
STORAGE_PREFIX
: préfixe du chemin d'accès aux disques locaux cibles associés à une machine virtuelle à l'aide de l'interface NVMe (non-volatile memory express). Par exemple, sur Google Cloud, les chemins d'accès des appareils NVMe commencent toujours par/dev/nvme0n
.VOLUME_GROUP
: nom d'un groupe de volumes dans lequel vos SSD sont combinés (par exemple,omni-disk-cache-volume
).
-
Pour créer un volume logique à partir de la capacité libre du groupe de volumes de l'étape précédente, exécutez la commande suivante:
sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP
Remplacez
LOGICAL_VOLUME
par le nom d'un volume logique traité comme une partition par le LVM (par exemple,omni_disk_cache_device
). - Créez le système de fichiers
ext4
sur le volume logique. Si nécessaire, vous pouvez spécifier d'autres optionsext4
soumises à la sécurité des données.sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
Pour créer un répertoire servant de point d'installation sur la machine hôte et installer le système de fichiers, exécutez la commande suivante:
sudo mkdir /OMNI_DISK_CACHE_DIRECTORY sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY
Remplacez
OMNI_DISK_CACHE_DIRECTORY
par le nom du répertoire ou un chemin d'accès au répertoire servant de point d'installation (par exemple,omni_disk_cache_directory
).
Monter le répertoire de cache dans AlloyDB Omni
Avant d'activer le cache disque pour AlloyDB Omni exécuté dans un conteneur, vous devez installer le répertoire de cache dans AlloyDB Omni.
Pour savoir comment installer AlloyDB Omni à partir d'une image Docker et le personnaliser, consultez Personnaliser votre installation AlloyDB Omni.
Pour installer OMNI_DISK_CACHE_DIRECTORY
dans votre conteneur Docker exécutant AlloyDB Omni, utilisez la commande suivante:
Docker
sudo docker run --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v DATA_DIR:/var/lib/postgresql/data \ -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \ -d google/alloydbomni
Remplacez les éléments suivants :
CONTAINER_NAME
: nom à attribuer au nouveau conteneur AlloyDB Omni (par exemple,my-omni
).PASSWORD
: mot de passe de l'administrateur racine de votre base de données PostgreSQL.DATA_DIR
: chemin d'accès au système de fichiers que vous souhaitez qu'AlloyDB Omni utilise pour son répertoire de données.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: répertoire de cache dans le conteneur AlloyDB Omni qui se mappe sur le point d'installation sur la machine hôte (par exemple, en fonction de la valeur du répertoire de cache dans le conteneur,/omni_disk_cache_directory
, semblable àOMNI_DISK_CACHE_DIRECTORY
, ou/disk/cache/inside/container
).
Podman
podman run --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v DATA_DIR:/var/lib/postgresql/data \ -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \ -d docker.io/google/alloydbomni
Remplacez les éléments suivants :
CONTAINER_NAME
: nom à attribuer au nouveau conteneur AlloyDB Omni (par exemple,my-omni
).PASSWORD
: mot de passe de l'administrateur racine de votre base de données PostgreSQL.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: répertoire de cache dans le conteneur AlloyDB Omni qui se mappe sur le point d'installation sur la machine hôte (par exemple, en fonction de la valeur du répertoire de cache dans le conteneur,/omni_disk_cache_directory
, semblable àOMNI_DISK_CACHE_DIRECTORY
, ou/disk/cache/inside/container
).
Pour accorder des autorisations d'accès complet à l'OMNI_DISK_CACHE_DIRECTORY
monté, exécutez les commandes suivantes:
Docker
sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER sudo docker exec -it CONTAINER_NAME chmod -R a+rw /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
Podman
sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER sudo podman exec -it CONTAINER_NAME chmod -R a+rw /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
Activer le cache disque AlloyDB Omni pour AlloyDB Omni exécuté dans un conteneur
Pour activer le cache disque AlloyDB Omni pour votre base de données, définissez les paramètres de configuration unifiée (GUC, Grand Unified Configuration) appropriés après vous être assuré que le répertoire de cache installé est accessible depuis le conteneur Docker.
-
Pour vous connecter à la base de données AlloyDB Omni conteneurisée en tant que super-utilisateur, utilisez la commande suivante:
Docker
sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
Podman
sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
-
Pour définir la valeur des paramètres, utilisez les commandes suivantes dans la base de données AlloyDB Omni:
alter system set omni_disk_cache_enabled=on; alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
-
Par défaut, AlloyDB Omni utilise tout l'espace disponible dans le système de fichiers. Si nécessaire, vous pouvez remplacer la valeur par défaut à l'aide du paramètre
omni_disk_cache_file_size
.alter system set omni_disk_cache_file_size=SIZE_IN_MB;
-
Pour que la modification des paramètres de configuration de la mise en cache prenne effet, redémarrez votre conteneur en cours d'exécution avec AlloyDB Omni:
Docker
sudo docker restart CONTAINER_NAME
Podman
sudo podman restart CONTAINER_NAME
Kubernetes
Activer le cache disque sur un volume générique
Vous pouvez activer le cache de disque à l'aide d'un volume générique.
Pour activer le cache de disque sur un volume générique sur l'opérateur Kubernetes AlloyDB Omni, vous devez préparer un volume persistant et un storageClass
.
Par exemple, si vous utilisez GKE et que le volume persistant et storageClass
ne sont pas prêts, assurez-vous d'avoir effectué les opérations suivantes avant d'activer le cache de disque sur un volume générique:
- Vous avez créé un cluster avec un stockage basé sur des SSD locaux.
- Vous avez formaté votre volume avec le système de fichiers ext4 en suivant la première étape de la section Exécuter l'approvisionneur statique de volumes locaux.
- Vous avez créé manuellement un volume persistant pour chaque SSD de votre cluster avec l'
storageClass
qui définit le stockage persistant sur un appareil de stockage.
Pour activer le cache de disque sur un volume générique pour votre base de données, procédez comme suit:
Modifiez le fichier manifeste de votre cluster de base de données pour ajouter l'attribut
ultraFastCache
à la sectionfeatures
de la sectionspec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE genericVolume: storageClass: "STORAGE_CLASS_NAME" ...
Remplacez les éléments suivants :
DB_CLUSTER_NAME
: nom de votre cluster de base de données. Il s'agit du même nom de cluster de base de données que vous avez déclaré lors de sa création.DISK_CACHE_SIZE
: taille du cache (par exemple,100Gi
). Il doit être supérieur àshared_buffers
. Ce champ est facultatif. Si vous ne spécifiez pas la valeur de ce champ, AlloyDB Omni utilise tout l'espace restant sur le disque, ce qui s'applique à la fois à AlloyDB Omni dans un conteneur et sur un cluster Kubernetes.STORAGE_CLASS_NAME
: nom dustorage class
du volume de cache ultra rapide (par exemple,local-storage
).
- Appliquez à nouveau le fichier manifeste.
Activer le cache de disque sur un volume local
Si vous souhaitez utiliser un volume local, vous n'avez pas besoin de créer un volume persistant. Vous pouvez utiliser l'optimisation suivante à la place.
Par exemple, si vous utilisez GKE et que le volume persistant et storageClass
ne sont pas prêts, assurez-vous d'avoir effectué les opérations suivantes avant d'activer le cache de disque sur un volume local:
- Vous avez créé un cluster avec un stockage basé sur des SSD locaux.
- Vous avez formaté votre volume avec le système de fichiers ext4 en suivant la première étape de la section Exécuter l'approvisionneur statique de volumes locaux.
Pour activer le cache de disque sur un volume local pour votre base de données, procédez comme suit:
Modifiez le fichier manifeste de votre cluster de base de données pour ajouter l'attribut
ultraFastCache
à la sectionfeatures
de la sectionspec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE localVolume: path: "LOCAL_VOLUME_PATH" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: "LABEL_KEY" operator: "OPERATOR_VALUE" values: - "LABEL_KEY_VALUE" ...
Remplacez les éléments suivants :
CLUSTER_NAME
: nom de votre cluster de base de données. Il s'agit du même nom de cluster de base de données que vous avez déclaré lors de sa création.DISK_CACHE_SIZE
: taille du cache (par exemple,100Gi
). Il doit être supérieur àshared_buffers
. Ce champ est facultatif. Si vous ne spécifiez pas la valeur de ce champ, AlloyDB Omni utilise tout l'espace restant sur le disque, ce qui s'applique à la fois à AlloyDB Omni dans un conteneur et sur un cluster Kubernetes.STORAGE_CLASS_NAME
: nom de la classe de stockage.LOCAL_VOLUME_PATH
: chemin d'accès au volume local (par exemple,/mnt/disks/raid/0
).LABEL_KEY
: libellé du nœud pour la clé qui sert d'indicateur d'emplacement et facilite la distribution uniforme des pods dans le cluster (par exemple,cloud.google.com/gke-local-nvme-ssd
).OPERATOR_VALUE
: relation de la clé à un ensemble de valeurs (par exemple,In
). Définissez le paramètre sur l'une des valeurs suivantes :-
In
: le tableau des valeurs ne doit pas être vide. -
NotIn
: le tableau des valeurs ne doit pas être vide. -
Exists
: le tableau des valeurs doit être vide. -
DoesNotExist
: le tableau des valeurs doit être vide. -
Gt
: le tableau de valeurs doit comporter un seul élément, qui est interprété comme un entier. -
Lt
: le tableau de valeurs doit comporter un seul élément, qui est interprété comme un entier.
-
LABEL_KEY_VALUE
: valeur de votre clé de libellé (par exemple,true
). Définissez le paramètre sur un tableau de valeurs de chaîne comme suit :- Si l'opérateur est
In
ouNotIn
, le tableau de valeurs ne doit pas être vide. - Si l'opérateur est
Exists
ouDoesNotExist
, le tableau des valeurs doit être vide. - Si l'opérateur est
Gt
ouLt
, le tableau de valeurs doit contenir un seul élément, qui est interprété comme un entier.
- Si l'opérateur est
- Appliquez à nouveau le fichier manifeste.
Vérifier la configuration du cache de disque
Après avoir activé le cache de disque AlloyDB Omni, vérifiez que le cache de disque est accessible en surveillant l'activité de lecture et d'écriture sur les disques à l'aide des utilitaires disponibles, tels que iotop
ou iostat
.
Vous pouvez également vérifier si le cache disque AlloyDB Omni est ouvert.
La procédure à suivre pour vérifier la configuration du cache de disque d'AlloyDB Omni dépend de l'environnement dans lequel vous exécutez AlloyDB Omni : conteneur ou cluster Kubernetes.
Serveur unique
Docker
sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"
Podman
sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"
Kubernetes
kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"
Si la mise en cache sur disque est correctement configurée, le message Successfully opened omni disk cache ...
s'affiche dans les journaux.
Étape suivante
- À propos de la gestion automatique de la mémoire
- À propos des disques SSD locaux
- Créer et démarrer une instance de VM