À propos de l'optimiseur de requêtes

Qu'est-ce qu'un optimiseur de requêtes ?

L'optimiseur de requête SQL de Cloud 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 permettant de transformer une instruction déclarative en un plan d'exécution de requêtes implique de transformer les structures en arborescence 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 consiste à 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 méthodes heuristiques sont très simples, comme le fait de filtrer des données sur des machines distantes au lieu de les transmettre à l'ordinateur local. 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 de manière efficace à l'aide de ces règles fixes. Par conséquent, l'optimiseur de Spanner prend également des décisions basées sur un coût estimé 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 générées par des fragments de la requête. Par exemple, Spanner estime le nombre de lignes de la table"Songs"qui qualifieront le filtre SongGenre = "Country" si ce filtre apparaît dans une requête. Pour faciliter le calcul de ces estimations, Spanner collecte régulièrement les statistiques pour caractériser la distribution des données dans une base de données.

Pour en savoir plus sur les plans d'exécution de requêtes et leur utilisation par Cloud 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 Cloud Spanner va évoluer, élargir l'ensemble de choix dans le plan d'exécution de requêtes et améliorer la précision des estimations qui alimentent ces choix, ce qui rend les plans d'exécution de requêtes plus efficaces.

Spanner publie les mises à jour de l'optimiseur en tant que nouvelles versions de l'optimiseur de requêtes. Il améliore 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 Cloud Spanner.

Packages de statistiques de l'optimiseur de requêtes

Spanner conserve les statistiques sur la distribution des données des colonnes de la table afin d'estimer le nombre de lignes qui seront générées par une requête. L'optimiseur de requêtes se base sur ces estimations pour choisir le meilleur plan d'exécution de requêtes. Ces statistiques sont mises à jour régulièrement par Spanner. Étant donné que les statistiques sont utilisées pour choisir les plans d'exécution de requêtes, lorsqu'elles sont mises à jour, il est possible pour Spanner de 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 des packages de statistiques tous les trois jours. Pour créer un package de statistiques manuellement, utilisez l'instruction LDD ANALYZE.

La création d'un package de statistiques peut être bénéfique pour les performances des requêtes après des modifications importantes apportées aux données ou au schéma de votre base de données. Par exemple:

  • 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 l'instruction exécutée par Spanner, l'optimiseur de requêtes peut prendre jusqu'à dix minutes pour prendre en compte un nouveau package de statistiques dans sa 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 empêche l'échec des requêtes après la récupération du package de statistiques. La valeur de ALLOW_GC peut être modifiée à l'aide de l'instruction LDD ALTER STATISTICS.

Conservation des packages et informations personnelles

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 un package de statistiques régulièrement et le conserve pendant 30 jours par défaut. 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 plus longtemps. De plus, les contenus des packages de statistiques sont 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 et est comptabilisé dans votre coût de stockage total.

Étapes suivantes