Cette page explique comment gérer manuellement le contenu du moteur de données en colonnes pour accélérer les performances des requêtes. Elle explique comment ajouter et supprimer des tables, des vues matérialisées et des index ScaNN.
Gérer les tables, les vues matérialisées et les index ScaNN
En fonction de votre charge de travail, vous pouvez ajouter manuellement des colonnes au column store ou supprimer certaines ou toutes les colonnes d'une table ou d'une vue matérialisée du column store. L'évaluation des requêtes utilise automatiquement les données en colonnes stockées pour répondre aux requêtes.
De même, vous pouvez ajouter manuellement un index ScaNN au moteur de données en colonnes pour accélérer la recherche vectorielle. Cela permet d'effectuer des recherches efficaces des voisins les plus proches sur de grands ensembles de données d'embeddings vectoriels.
Lorsque vous choisissez les tables, les vues matérialisées et les colonnes à ajouter au store orienté colonnes, tenez compte à la fois de la taille du store orienté colonnes et de la forme de la charge de travail. Il est recommandé de sélectionner les grandes tables ou vues qui sont fréquemment analysées. Dans ces tables ou vues, identifiez les index volumineux non uniques utilisés par la charge de travail OLAP. Vous pouvez ajouter les colonnes de ces index au column store et éventuellement supprimer les index, ce qui élimine le coût de performance associé à leur maintenance sur l'instance principale.
Utilisez l'une des méthodes suivantes pour gérer le contenu du moteur columnar :
- Gérer le contenu du store orienté colonnes en mettant à jour les indicateurs de base de données
- Gérer le contenu du store orienté colonnes à l'aide de fonctions SQL
Pour savoir quels types de données et sources de données vous pouvez utiliser lorsque vous ajoutez des tables, des colonnes et des vues matérialisées au store orienté colonnes, consultez Données que vous pouvez ajouter au store orienté colonnes.
Avant de commencer
- Vous devez disposer de l'un des rôles IAM suivants dans le projet Google Cloud que vous utilisez :
roles/alloydb.admin
(rôle IAM prédéfini "Administrateur AlloyDB")roles/owner
(rôle IAM de base "Propriétaire")roles/editor
(rôle IAM de base Éditeur)
Si vous ne disposez d'aucun de ces rôles, contactez l'administrateur de votre organisation pour demander l'accès.
Gérer le contenu du store orienté colonnes en mettant à jour les options de base de données
Vous pouvez gérer manuellement le contenu du store orienté colonnes en mettant à jour le flag de base de données google_columnar_engine.relations
. L'indicateur comporte une seule valeur qui spécifie toutes les sources de données de votre column store. Lors du redémarrage, les colonnes spécifiées dans cet indicateur sont automatiquement renseignées dans le store orienté colonnes.
Vous pouvez utiliser cet indicateur avec auto-columnarization. Si le moteur de données en colonnes dispose de mémoire après avoir rempli les colonnes que vous spécifiez à l'aide de l'indicateur google_columnar_engine.relations
, l'auto-columnarisation ajoute d'autres colonnes au store orienté colonnes, si nécessaire.
Pour savoir comment définir les indicateurs de base de données d'une instance à l'aide de Google Cloud CLI ou de la console, consultez Configurer les indicateurs de base de données d'une instance. Google Cloud
Ajouter des colonnes à l'aide d'options
Pour ajouter des colonnes au store orienté colonnes, définissez l'indicateur google_columnar_engine.relations
d'une instance. Définissez sa valeur sur une liste d'éléments séparés par une virgule, chaque élément spécifiant une liste de colonnes à inclure à partir d'une table spécifique, au format suivant :
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
Remplacez les éléments suivants :
DATABASE_NAME : base de données contenant les colonnes à ajouter au column store.
SCHEMA_NAME : schéma identifiant les tables ou les vues matérialisées à ajouter au column store (par exemple,
public
).TABLE_NAME : table ou vue matérialisée contenant les colonnes à ajouter au column store.
COLUMN_LIST : liste des colonnes à ajouter au column store, séparées par des virgules.
Pour ajouter toutes les colonnes d'une table ou d'une vue matérialisée, omettez la liste des colonnes :
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
Pour en savoir plus sur la configuration des options de base de données sur une instance, consultez Configurer les options de base de données d'une instance.
Syntaxe de la Google Cloud CLI lorsque vous utilisez google_columnar_engine.relations
Si vous utilisez Google Cloud CLI pour définir le flag google_columnar_engine.relations
, vous devez utiliser la syntaxe de délimiteur alternatif pour séparer les flags de base de données que vous définissez. En effet, la liste des colonnes est séparée par des virgules, ce qui vous oblige à utiliser un caractère autre qu'une virgule lorsque vous spécifiez des indicateurs dans le même argument de ligne de commande.
L'exemple suivant montre comment utiliser gcloud CLI pour ajouter deux colonnes dans le schéma public
au column store. L'exemple définit un indicateur distinct pour activer le moteur en colonnes, car l'utilisation de la commande gcloud alloydb instance update
pour définir une option de base de données doit également définir toutes les autres options de base de données dont vous souhaitez modifier la valeur par défaut, même si elles sont déjà définies.
gcloud alloydb instances update INSTANCE_NAME \
--database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
--region=REGION_ID \
--cluster=CLUSTER_ID
Supprimer des colonnes à l'aide d'options
Pour supprimer des colonnes du column store, définissez une nouvelle valeur pour l'indicateur google_columnar_engine.relations
décrit dans la section précédente, en omettant les colonnes que vous souhaitez supprimer.
Pour supprimer toutes les colonnes du column store, annulez la définition de l'indicateur google_columnar_engine.relations
de votre instance.
Pour savoir comment définir des options de base de données sur une instance, consultez Configurer les options de base de données d'une instance.
Gérer le contenu du store orienté colonnes à l'aide de fonctions SQL
Vous pouvez gérer manuellement le contenu du store orienté colonnes à l'aide de fonctions SQL.
Ajouter des colonnes à l'aide de fonctions SQL
Exécutez la fonction SQL google_columnar_engine_add
pour ajouter des colonnes au store orienté colonnes.
Cette méthode ajoute les colonnes spécifiées au store orienté colonnes et gère les colonnes uniquement dans le nœud connecté. Les nouvelles colonnes ne sont pas conservées dans le magasin lors des redémarrages d'instance.
Cette méthode ne modifie pas l'indicateur de base de données google_columnar_engine.relations
. L'organisation automatique des données en colonnes ne tient pas compte des colonnes ajoutées par cette fonction SQL.
Client psql
SELECT google_columnar_engine_add( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
-
Remplacez les éléments suivants :
- "TABLE_NAME" : chaîne contenant le nom de la table ou de la vue matérialisée. Si la table ou la vue se trouve dans un schéma autre que
public
, spécifiez le nom du schéma, un point et le nom de la table ou de la vue (par exemple,'myschema.mytable'
). - 'COLUMN_LIST' : chaîne contenant une liste sensible à la casse des noms des colonnes que vous souhaitez ajouter, séparés par une virgule. Si vous souhaitez ajouter toutes les colonnes de la table ou de la vue matérialisée au column store, omettez ce paramètre.
Supprimer des colonnes à l'aide de fonctions SQL
Exécutez la fonction SQL google_columnar_engine_drop
comme suit :
Client psql
SELECT google_columnar_engine_drop( relation => 'TABLE_NAME', columns => 'COLUMN_LIST' );
- "TABLE_NAME" : chaîne contenant le nom de la table ou de la vue matérialisée. Si la table ou la vue se trouve dans un schéma autre que
public
, spécifiez le nom du schéma, un point et le nom de la table ou de la vue (par exemple,'myschema.mytable'
). - 'COLUMN_LIST' : chaîne contenant une liste sensible à la casse des noms des colonnes que vous souhaitez ajouter, séparés par une virgule. Si vous souhaitez ajouter toutes les colonnes de la table ou de la vue matérialisée au column store, omettez ce paramètre.
Vous pouvez utiliser la fonction google_columnar_engine_drop
pour supprimer les colonnes ajoutées en modifiant l'indicateur de base de données google_columnar_engine.relations
. Toutefois, lorsque vous le faites, ces colonnes sont réajoutées au store orienté colonnes lorsque l'instance redémarre.
Gérer les index ScaNN dans le moteur de données en colonnes
Pour accélérer la recherche vectorielle, vous pouvez charger les index ScaNN dans le cache d'index du moteur de données en colonnes.
Ajouter, supprimer et valider des index ScaNN à l'aide de fonctions SQL
Vous pouvez ajouter, supprimer et valider manuellement des index ScaNN à partir du cache d'index à l'aide de fonctions SQL. L'ajout d'un index au cache peut accélérer les requêtes de recherche vectorielle.
Ajouter un index ScaNN
Pour ajouter un index spécifique au cache d'index du moteur de données en colonnes, utilisez la fonction SQL suivante :
SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');
Remplacez SCANN_INDEX_NAME
par le nom de l'index ScaNN que vous souhaitez ajouter au cache d'index du moteur columnar.
Supprimer un index ScaNN
Pour supprimer un index ScaNN spécifique du moteur de données en colonnes, utilisez la fonction SQL suivante :
SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');
Remplacez SCANN_INDEX_NAME
par le nom de l'index ScaNN que vous souhaitez supprimer.
Vérifier l'utilisation du moteur de données en colonnes
Pour vérifier si vos analyses d'index vectoriels utilisent le moteur de données en colonnes, exécutez la commande EXPLAIN ANALYZE
avec l'option COLUMNAR_ENGINE
:
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
La commande renvoie un plan de requête semblable à ce qui suit :
Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
La présence de columnar engine nodes hit
et Columnar Engine ScaNN Info: (index found=true)
dans le résultat confirme que le moteur de données en colonnes est utilisé pour la requête.