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 interrogées par la requête, en un plan d'exécution impératif, qui décrit une manière d'obtenir précisément ces données. Le processus de la transformation d'une instruction déclarative en plan d'exécution de requêtes implique des transformations en arborescence utilisée 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.

L'un des rôles importants de l'optimiseur est de concevoir 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'optimisation des coûts pour produire des plans efficaces. Certaines heuristiques sont très simples, comme "appliquer les filtres sur les machines distantes plutôt que d'extraire des 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.

Toutes les décisions d'exécution ne pouvant pas être prises efficacement en utilisant ces règles fixes, l'optimiseur de Spanner prend également des décisions basées sur le coût estimé des alternatives. Ces estimations de coûts sont calculées selon la structure suivante : la requête, le schéma de la base de données et les estimations du volume de données sont générés par les fragments de la requête. Par exemple, Spanner estimera le nombre de lignes du tableau "Titres" qui permettent d'appliquer le filtre SongGenre = "Country" si ce filtre apparaît dans une requête. Pour aider les le calcul de ces estimations, Spanner recueille régulièrement des statistiques pour caractériser la distribution des données dans une base de données.

De plus, Spanner optimise l'exécution des requêtes en déterminer si une méthode de traitement orientée ligne ou colonne doit être utilisée pour la requête. Pour en savoir plus, consultez Optimiser les analyses.

Pour en savoir plus sur les plans d'exécution de requêtes et leur utilisation par Spanner afin d'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êtes Spanner évoluera et élargira les possibilités de choix dans le plan d'exécution de la requête et améliorer la précision les estimations qui sous-tendent ces choix, ce qui conduit à des requêtes plus efficaces les plans d'exécution.

Spanner publie les mises à jour de l'optimiseur en tant que nouvel optimiseur de requête afin d'améliorer l'efficacité de ses plans d'exécution des 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 conserve des statistiques sur la distribution des données des colonnes de table afin d'estimer le nombre de lignes générées par une requête. L'optimiseur de requêtes utilise ces estimations pour vous aider à choisir le meilleur plan d'exécution de 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 de requêtes, il est possible que Spanner modifie le plan de requête utilisé pour une requête lorsque les statistiques sont mises à jour.

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 package de statistiques, utilisez la méthode L'instruction LDD GoogleSQL ANALYZE ou PostgreSQL Instruction LDD ANALYZE.

Après avoir apporté des modifications importantes aux données ou au schéma de votre base de données, la construction d'une nouvelle le package de statistiques peut améliorer les performances des requêtes. Il est recommandé de créer un nouveau package de statistiques si les conditions suivantes sont remplies :

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

L'exécution d'une instruction DDL ANALYZE met à jour votre schéma, lance une opération de longue durée et annule la création de toute statistique déclenchée automatiquement.

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

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

Les packages de statistiques dans Spanner sont conservés pendant 30 jours après leur création, après quoi ils sont soumis à la récupération de mémoire.

La table intégrée INFORMATION_SCHEMA.SPANNER_STATISTICS de Spanner contient une 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 le package de statistiques a été récupéré. 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 les conserve par défaut pendant 30 jours. Un petit échantillon de valeurs la base de données peut être conservée pendant 30 jours supplémentaires dans les histogrammes statistiques. 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. De plus, le contenu des packages de statistiques est inclus dans des 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 et sont comptabilisées dans le total de vos coûts de stockage.

Étape suivante