Configurer le moteur de données en colonnes dans AlloyDB Omni

Sélectionnez une version de la documentation :

Cette page explique comment activer ou désactiver le moteur en colonnes sur un cluster de bases de données AlloyDB Omni. Il explique également comment configurer une taille initiale appropriée pour son column store.

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 :

  1. Exécutez la commande PostgreSQL ALTER SYSTEM :

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. 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.

  3. 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 :

  1. 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).

  2. 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.

  1. 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 exemple omni-disk-cache-volume.
  2. 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 exemple omni_disk_cache_device.

  3. Créez le système de fichiers ext4 sur le volume logique. Si nécessaire, vous pouvez spécifier d'autres options ext4 soumises à la sécurité des données.
    sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. 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 PostgreSQL
  • DATA_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 PostgreSQL
  • 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_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.

  1. 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.

  2. 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.

  3. 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 :

  1. 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).

  2. 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 :

  1. Exécutez la commande PostgreSQL ALTER SYSTEM :
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. 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