Présentation de l'optimiseur de requêtes

Cette page décrit l'optimiseur de requêtes Spanner et ses avantages.

Présentation

L'optimiseur de requête SQL de Spanner convertit une instruction SQL déclarative, qui décrit les données requises par la requête, en un plan d'exécution impératif, qui décrit une façon d'obtenir ces données avec précision. Le processus de transformation d'une instruction déclarative en plan d'exécution de requête implique d'effectuer des transformations au niveau des arborescences utilisées pour représenter la requête. L'optimiseur, au cours de la création d'un plan d'exécution, conserve la signification logique de la requête SQL d'origine afin de renvoyer les lignes correctes.

Un autre rôle important de l'optimiseur est de produire un plan d'exécution efficace.

Comment l'optimiseur Spanner génère-t-il des plans d'exécution efficaces ?

L'optimiseur de Spanner utilise une combinaison d'heuristiques bien établies et d'optimisations basées sur les coûts pour produire des plans efficaces. Certaines heuristiques sont très simples, telles que "appliquer des filtres sur des machines distantes plutôt que de récupérer les données sur la machine locale". D'autres heuristiques sont plus complexes, mais incarnent tout de même le principe de logique de déplacement visant à réduire le volume des données à proximité des données. Ce principe est particulièrement important dans un système qui répartit les données sur plusieurs machines.

Ces règles fixes ne permettent pas de prendre toutes les décisions d'exécution efficacement. C'est pourquoi l'optimiseur de Spanner prend également des décisions basées sur l'estimation du coût des alternatives. Ces estimations de coûts sont calculées à l'aide de la structure de la requête, du schéma de la base de données et des estimations du volume de données qui seront produites par les fragments de la requête. Par exemple, Spanner estimera le nombre de lignes de la table "Songs" qui qualifient le filtre SongGenre = "Country" si celui-ci apparaît dans une requête. Pour faciliter le calcul de ces estimations, Spanner recueille régulièrement des statistiques afin de caractériser la répartition des données dans une base de données.

En outre, Spanner optimise l'exécution des requêtes en déterminant automatiquement si une méthode de traitement orientée ligne ou colonne doit être utilisée pour la requête. Pour en savoir plus, consultez Analyses Optimize.

Pour en savoir plus sur les plans d'exécution de requêtes et sur la façon dont Spanner les utilise pour exécuter des requêtes dans un environnement distribué, consultez la page Plans d'exécution de requêtes.

Gestion des versions de l'optimiseur de requêtes

Au fil du temps, l'optimiseur de requête Spanner évoluera, élargissant l'ensemble des choix dans le plan d'exécution de la requête et améliorant la précision des estimations qui sous-tendent ces choix, ce qui conduira à des plans d'exécution des requêtes plus efficaces.

Spanner publie des mises à jour de l'optimiseur sous forme de nouvelles versions afin d'améliorer l'efficacité de ses plans d'exécution de requêtes. Pour en savoir plus sur les différentes versions, consultez la page Versions de l'optimiseur de requêtes Spanner.

Packages de statistiques de l'optimiseur de requêtes

Spanner gère des statistiques sur la distribution des données des colonnes de la table pour vous aider à estimer le nombre de lignes qui seront générées par une requête. L'optimiseur de requêtes s'appuie sur ces estimations pour choisir le meilleur plan d'exécution des requêtes. Ces statistiques sont régulièrement mises à jour par Spanner. Étant donné que les statistiques sont utilisées pour choisir les plans d'exécution des requêtes, une fois les statistiques mises à jour, Spanner peut modifier le plan de requête utilisé pour une requête.

Par défaut, les bases de données utilisent automatiquement le dernier package de statistiques généré. Vous pouvez épingler une version de package de statistiques antérieure pour forcer votre base de données à l'utiliser. Vous avez également la possibilité d'exécuter des requêtes individuelles avec un package de statistiques autre que le plus récent.

Créer un package de statistiques

Spanner génère automatiquement de nouveaux packages de statistiques tous les trois jours. Pour créer manuellement un nouveau package de statistiques, utilisez l'instruction LDD GoogleSQL ANALYZE ou l'instruction LDD PostgreSQL ANALYZE.

Après des modifications importantes des données ou du schéma de votre base de données, la création d'un nouveau package de statistiques peut améliorer les performances des requêtes. Nous vous recommandons de créer un nouveau package de statistiques dans les cas suivants:

  • La base de données traite un grand nombre d'insertions, de mises à jour ou de suppressions.
  • Vous ajoutez un nouvel index à la base de données.
  • Vous ajoutez une colonne à un tableau.

L'exécution d'une instruction LDD ANALYZE met à jour votre schéma et lance une opération de longue durée.

Une fois que Spanner a terminé d'exécuter l'instruction, il faut jusqu'à dix minutes pour que l'optimiseur de requêtes prenne en compte un nouveau package de statistiques dans la planification des requêtes.

Récupération de mémoire dans les packages de statistiques

Dans Spanner, les packages de statistiques sont conservés pendant 30 jours à compter de leur création. Passé ce délai, ils sont soumis à un processus de récupération de mémoire.

La table INFORMATION_SCHEMA.SPANNER_STATISTICS intégrée à Spanner contient la liste des packages de statistiques disponibles. Chaque ligne de ce tableau répertorie un package de statistiques par nom, et le nom contient l'horodatage de création du package. Chaque entrée contient également un champ appelé ALLOW_GC qui indique si un package peut faire l'objet d'une récupération de mémoire ou non.

Vous pouvez épingler l'un des packages répertoriés dans cette table pour forcer l'ensemble de votre base de données à l'utiliser. Le package de statistiques choisi ne fait pas l'objet d'une récupération de mémoire et la valeur de ALLOW_GC est ignorée tant que la base de données utilise ce package épinglé. Afin d'utiliser un package de statistiques particulier pour une requête individuelle, le package en question doit être répertorié avec ALLOW_GC=FALSE ou épinglé. Cela permet d'éviter l'échec des requêtes après la récupération de mémoire du package de statistiques. Vous pouvez modifier la valeur de ALLOW_GC à l'aide de l'instruction LDD GoogleSQL ALTER STATISTICS ou PostgreSQL ALTER STATISTICS.

Conservation des packages et informations permettant d'identifier personnellement l'utilisateur

Un package de statistiques contient des histogrammes des données de colonne, conformément aux pratiques standards de l'industrie. Cela permet à l'optimiseur de requêtes de sélectionner les plans de requête optimaux. L'histogramme est construit à l'aide d'un petit échantillon de valeurs. Ce petit ensemble de données peut contenir des informations personnelles.

Spanner crée régulièrement un package de statistiques et le conserve par défaut pendant 30 jours. Ainsi, un petit échantillon de valeurs supprimées de la base de données peut être conservé pendant 30 jours supplémentaires dans les histogrammes de statistiques. Les packages de statistiques épinglés avec l'option de base de données optimizer_statistics_package ou les packages avec l'option ALLOW_GC=FALSE ne seront pas récupérés. Les histogrammes de ces packages peuvent contenir des valeurs supprimées de la base de données pendant une période plus longue. En outre, le contenu des packages de statistiques est inclus dans les sauvegardes de base de données.

Les statistiques de l'optimiseur sont stockées de la même manière que les données utilisateur.

L'espace de stockage total requis pour ces packages est généralement inférieur à 100 Mo. Il est comptabilisé dans vos coûts de stockage totaux.

Étapes suivantes