Pour obtenir un aperçu conceptuel du moteur de données en colonnes AlloyDB, consultez Présentation du moteur de données en colonnes AlloyDB Omni.
Activer le moteur de données en colonnes
Pour utiliser le moteur columnar sur une instance, définissez l'indicateur google_columnar_engine.enabled
de l'instance sur on
.
Serveur unique
Pour définir google_columnar_engine.enabled
sur on
, procédez comme suit :
Exécutez la commande PostgreSQL
ALTER SYSTEM
:ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
Si vous souhaitez ajuster la configuration du moteur de colonnes, suivez les instructions de la section suivante avant de redémarrer le serveur de base de données. Sinon, suivez l'étape ci-dessous pour redémarrer le serveur de base de données maintenant.
Pour que la modification des paramètres de configuration 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
Configurer la taille du column store
Lorsque le moteur de données en colonnes est activé sur une instance, AlloyDB Omni alloue une partie de la mémoire de l'instance pour stocker ses données en colonnes. En dédiant de la RAM haute vitesse à votre store orienté colonnes, vous vous assurez qu'AlloyDB Omni peut accéder aux données en colonnes le plus rapidement possible.
La mémoire et le cache de stockage représentent ensemble la capacité globale du moteur de données en colonnes.
Configurer la mémoire
Vous pouvez définir l'allocation sur une taille fixe à l'aide de l'option google_columnar_engine.memory_size_in_mb
.
Serveur unique
Pour définir l'indicateur google_columnar_engine.memory_size_in_mb
sur une instance, procédez comme suit :
Configurez la mémoire en exécutant la commande PostgreSQL
ALTER SYSTEM
:ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
Remplacez
COLUMN_MEMORY_SIZE
par la nouvelle taille de stockage de la colonne, en mégaoctets (par exemple,256
).Pour que la modification des paramètres de configuration 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
Configurer le cache de stockage
Serveur unique
Vous pouvez configurer le cache de stockage du moteur en colonnes sur des appareils dédiés ou partagés.
Appareils dédiés
Sur les appareils dédiés, pour activer le cache de stockage du moteur de données en colonnes AlloyDB Omni pour un conteneur à serveur unique, vous devez provisionner des disques et créer un système de fichiers, puis installer le répertoire du cache dans AlloyDB Omni et enfin activer le cache de stockage en colonnes.
Provisionner des disques et créer un système de fichiers
Pour provisionner des disques et créer un système de fichiers pour le cache de stockage du moteur columnar AlloyDB Omni, vous devez créer un système de fichiers sur un ou plusieurs disques, puis le monter dans un conteneur avec AlloyDB Omni. Vous pouvez également utiliser des utilitaires tels que mdadm
ou lvm
pour regrouper la capacité à l'aide 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 périphériques 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 (Nonvolatile Memory Express). Par exemple, sur Google Cloud, les chemins d'accès aux périphériques NVMe commencent toujours par/dev/nvme0n
.VOLUME_GROUP
: nom d'un groupe de volumes dans lequel vos SSD sont combinés, par exempleomni-disk-cache-volume
.
-
Pour créer un volume logique à partir de la capacité libre du groupe de volumes de l'étape précédente, utilisez 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 exempleomni_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_COLUMNAR_STORAGE_CACHE_DIRECTORY sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
Remplacez
OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
par le nom du répertoire ou par un chemin d'accès au répertoire servant de point de montage (par exemple,omni_columnar_storage_cache_directory
).
Monter le répertoire du cache de stockage en colonnes dans AlloyDB Omni
Avant d'activer le cache de 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_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_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 PostgreSQLDATA_DIR
: chemin d'accès au système de fichiers qu'AlloyDB Omni doit utiliser pour son répertoire de données.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: répertoire du cache dans le conteneur AlloyDB Omni qui correspond au point de montage sur la machine hôte (par exemple, en fonction de la valeur du répertoire du cache dans le conteneur,/omni_disk_cache_directory
, semblable àOMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_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 PostgreSQLCACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: répertoire du cache dans le conteneur AlloyDB Omni qui correspond au point de montage sur la machine hôte (par exemple, en fonction de la valeur du répertoire du cache dans le conteneur,/omni_columnar_storage_cache_directory
, semblable àOMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
, ou/disk/cache/inside/container
).
Pour accorder des autorisations d'accès complet au OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
monté, utilisez 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 de stockage en colonnes AlloyDB Omni pour AlloyDB Omni exécuté dans un conteneur
Pour activer le cache de stockage en colonnes AlloyDB Omni sur des appareils dédiés à votre base de données, définissez les paramètres GUC (Grand Unified Configuration) appropriés après vous être assuré que le répertoire de cache installé est accessible depuis le conteneur Docker.
Définissez le répertoire du cache de stockage en colonnes :
ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
Remplacez
OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
par le chemin absolu du répertoire dédié dans lequel vous souhaitez qu'AlloyDB Omni stocke les fichiers de cache de stockage du moteur en colonnes. Assurez-vous que ce répertoire existe et qu'il dispose des autorisations d'écriture appropriées pour l'utilisateur de la base de données.Configurez la taille du cache de stockage :
ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
Remplacez
STORAGE_CACHE_SIZE
par la taille souhaitée pour le cache de stockage en colonnes, en mégaoctets. Par défaut, la taille totale de l'appareil dédié est allouée au moteur en colonnes, sans affecter le cache disque. La valeur maximale autorisée pour cet indicateur est de 1 000 *google_columnar_engine.memory_size_in_mb
, selon la valeur la plus faible.Pour que la modification des paramètres de configuration 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
Appareils partagés
Avant de configurer le cache de stockage en colonnes pour les appareils partagés avec cache disque, vous devez activer le cache disque AlloyDB Omni.
Configurez le cache de stockage sur les appareils partagés comme suit :
Configurer le cache de stockage :
ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
Remplacez
STORAGE_CACHE_SIZE
par la taille du cache de stockage souhaitée, en mégaoctets. Par défaut, 5 % du cache de disque sont alloués au moteur en colonnes. La valeur maximale autorisée pour cet indicateur est de 50 % du cache disque total ou de 1 000 *google_columnar_engine.memory_size_in_mb
(selon la valeur la plus faible).Pour que la modification des paramètres de configuration 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
Activer la jointure vectorisée
Le moteur de données en colonnes dispose d'une fonctionnalité de jointure vectorisée qui peut améliorer les performances des jointures en appliquant un traitement vectorisé aux requêtes éligibles.
Une fois la jointure vectorisée activée, le planificateur de requêtes AlloyDB peut appliquer l'opérateur de jointure vectorisée au lieu de l'opérateur de jointure de hachage PostgreSQL standard. Le planificateur prend cette décision en comparant le coût d'exécution de la requête à l'aide de chaque méthode.
Pour activer la jointure vectorisée sur une instance, définissez l'indicateur google_columnar_engine.enable_vectorized_join
de l'instance sur on
.
Pour définir cet indicateur sur une instance, exécutez la commande PostgreSQL ALTER SYSTEM
:
ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';
Par défaut, AlloyDB Omni alloue un thread à la fonctionnalité de jointure vectorisée. Vous pouvez augmenter le nombre de threads disponibles pour cette fonctionnalité en définissant l'indicateur google_columnar_engine.vectorized_join_threads
sur une valeur plus élevée. La valeur maximale est de cpu_count * 2
.
Actualiser manuellement votre moteur de données en colonnes
Par défaut, lorsque le moteur de données en colonnes est activé, il actualise le column store en arrière-plan.
Pour actualiser manuellement le moteur de colonnes, exécutez la requête SQL suivante :
SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');
Remplacez TABLE_NAME
par le nom de la table ou de la vue matérialisée que vous souhaitez actualiser manuellement.
Désactiver le moteur de données en colonnes
Pour désactiver le moteur Columbar sur une instance, définissez l'indicateur google_columnar_engine.enabled
sur off
.
Serveur unique
Pour définir google_columnar_engine.enabled
sur off
, procédez comme suit :
- Exécutez la commande PostgreSQL
ALTER SYSTEM
:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
- Pour que la modification des paramètres de configuration prenne effet, redémarrez votre conteneur en cours d'exécution avec AlloyDB Omni.
Docker
Pour redémarrer un conteneur AlloyDB Omni, exécutez la commande docker container restart
:
sudo docker restart CONTAINER_NAME
Remplacez CONTAINER_NAME
par le nom que vous avez attribué au conteneur AlloyDB Omni lors de son installation.
Podman
Pour redémarrer un conteneur AlloyDB Omni, exécutez la commande podman container start
:
sudo podman restart CONTAINER_NAME
Remplacez CONTAINER_NAME
par le nom que vous avez attribué au conteneur AlloyDB Omni lors de son installation.
Résoudre les problèmes liés au moteur de données en colonnes
Corriger l'erreur insufficient shared memory
Si vous exécutez AlloyDB Omni sans suffisamment de mémoire partagée pour le moteur de données en colonnes, l'erreur suivante peut s'afficher :
Insufficient shared memory for generating the columnar formats.
Pour résoudre ce problème, vous pouvez spécifier la quantité de mémoire partagée disponible pour le conteneur AlloyDB Omni. La procédure à suivre dépend de votre système d'exploitation hôte.
Linux
Augmentez la taille de la partition /dev/shm
de votre machine hôte à l'aide d'une technique telle que la modification de votre fichier /etc/fstab
.
macOS
Installez un nouveau conteneur AlloyDB Omni en spécifiant une valeur de mémoire partagée plus élevée pour l'indicateur --shm-size
.
Corriger les colonnes qui ne sont pas remplies
Si les colonnes ne sont pas renseignées dans le moteur columnar, l'une des affirmations suivantes peut être vraie :
Les colonnes que vous souhaitez ajouter incluent un type de données non compatible.
Les exigences du moteur de données en colonnes ne sont pas respectées.
Pour résoudre ce problème, procédez comme suit :
- Vérifiez que les tables ou les vues matérialisées de la requête se trouvent dans le moteur de colonnes.
- Vérifiez l'utilisation du moteur en colonnes à l'aide de l'instruction
EXPLAIN
.
Étapes suivantes
Consultez la liste complète des indicateurs de base de données du moteur en colonnes.
Suivez le tutoriel Accélérer les requêtes analytiques avec le moteur de données en colonnes dans AlloyDB Omni de Google CodeLab.