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êtes SQL Spanner convertit une instruction SQL déclarative, qui décrit les données souhaitées par la requête, dans un plan d'exécution impératif, qui décrit une façon précise d'obtenir 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.

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 l'optimisation basée sur les coûts pour produire des plans efficaces. Certaines heuristiques sont très par exemple "appliquer des filtres sur des machines distantes plutôt que d'extraire vers 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 peuvent pas être prises efficacement à l'aide de ces règles fixes. L'optimiseur de Spanner prend également des décisions en fonction d'une estimation le coût des alternatives. Ces estimations de coûts sont calculées en utilisant la structure 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 combien de lignes du tableau "Songs" (Chansons) permettent d'appliquer le filtre SongGenre = "Country" si ce filtre apparaît dans une requête. Pour aider 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 Analyses Optimize.

Pour en savoir plus sur les plans d'exécution de requêtes et leur utilisation par Spanner pour exécuter des requêtes dans un environnement distribué, consultez 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 un ensemble 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 des 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 gère des statistiques sur la distribution des données de la table colonnes pour estimer le nombre de lignes qui seront générées par une requête. La requête l'optimiseur les utilise pour choisir le meilleur plan d'exécution des requêtes. Ces statistiques sont régulièrement mises à jour par Spanner. En effet, les statistiques sont utilisées pour choisir les plans d'exécution des requêtes, lorsque les statistiques sont il est possible que Spanner modifie le plan de requête qu'il utilise 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 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. En tant que bonne pratique, construisez 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.

Exécuter 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, 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, avant leur création, après quoi ils font l'objet d'un envoi vers la corbeille.

INFORMATION_SCHEMA.SPANNER_STATISTICS intégré à Spanner Le tableau 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 le package de statistiques a été récupéré. Vous pouvez modifier la valeur ALLOW_GC à l'aide de GoogleSQL ALTER STATISTICS ou PostgreSQL Instruction LDD 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. Ainsi, un petit échantillon de valeurs a été supprimé 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 pour une 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