Descripción general del optimizador de consultas

En esta página, se describe el optimizador de consultas de Spanner y sus beneficios.

Descripción general

El optimizador de consulta en SQL de Spanner convierte una instrucción de SQL declarativa que describe qué datos quiere la consulta, en un plan de ejecución imperativo que describe una forma de obtener esos datos con precisión. El proceso de transformar una declaración declarativa en un plan de ejecución de consultas implica realizar transformaciones a las estructuras de árbol usadas para representar la consulta. El optimizador, en el proceso de producción de un plan de ejecución, conserva la lógica el significado de la consulta en SQL original para que se devuelvan las filas correctas.

Otra función importante del optimizador es producir un plan de ejecución eficiente.

¿Cómo produce el optimizador de Spanner planes de ejecución eficientes?

El optimizador de Spanner usa una combinación de métodos heurísticos bien establecidos y una optimización basada en los costos para producir planes eficientes. Algunas heurísticas son muy sencillos, como "realizar filtros en máquinas remotas en lugar de extraer a la máquina local”. Otras heurísticas son más complejas, pero aún representan el principio de mover la lógica que reduce el volumen de datos más cerca de los datos. Ese principio es muy importante en un sistema que fragmenta datos en varias máquinas.

No todas las decisiones de ejecución se pueden tomar con eficacia usando reglas fijas, por lo que El optimizador de Spanner también toma decisiones basadas en una estimación el costo de las alternativas. Esas estimaciones de costos se calculan usando la estructura de la consulta, el esquema de la base de datos y las estimaciones del volumen de datos que se producirán con fragmentos de la consulta. Por ejemplo, Spanner estimará cuántas filas de la tabla Canciones califican el filtro Es SongGenre = "Country" si ese filtro aparece en una consulta. Para ayudar al de estas estimaciones, Spanner recopila periódicamente estadísticas para caracterizar la distribución de los datos en una base de datos.

Además, Spanner optimiza la ejecución de consultas determinar si se debe usar un método de procesamiento orientado a filas o columnas la consulta. Para obtener más información, consulta Cómo optimizar los análisis.

Para obtener más información sobre los planes de ejecución de consultas y cómo los usan Spanner para realizar consultas en un entorno distribuido, consulta Planes de ejecución de consultas.

Control de versiones del optimizador de consultas

Con el tiempo, el optimizador de consultas de Spanner evolucionará y ampliará conjunto de opciones en el plan de ejecución de consultas y mejorar la precisión de las estimaciones que fundamentan esas opciones, lo que genera consultas más eficientes los planes de ejecución.

Spanner lanza las actualizaciones del optimizador como un nuevo optimizador de consultas para mejorar la eficiencia de sus planes de ejecución de consultas. Para obtener más información Para obtener más información sobre las diferentes versiones, consulta Versiones del optimizador de consultas de Spanner.

Paquetes de estadísticas del optimizador de consultas

Spanner mantiene estadísticas sobre la distribución de datos de la tabla columnas para ayudar a estimar cuántas filas producirá una consulta. La consulta El optimizador usa estas estimaciones para ayudar a elegir el mejor plan de ejecución de consultas. Spanner actualiza estas estadísticas de forma periódica. Debido a que el las estadísticas se usan para elegir planes de ejecución de consultas, cuando es posible que Spanner cambie el plan de consultas que usa para una consulta.

De forma predeterminada, las bases de datos usan automáticamente el último paquete de estadísticas generado. Puedes fijar tu base de datos a una versión anterior del paquete de estadísticas. También tienes la opción de ejecutar consultas individuales con otro paquete de estadísticas que el último.

Crea un nuevo paquete de estadísticas

Spanner genera automáticamente un nuevo paquete de estadísticas cada tres días. Para construir un nuevo paquete de estadísticas manualmente, usa el Instrucción DDL ANALYZE de GoogleSQL o PostgreSQL Declaración de DDL ANALYZE.

Después de realizar cambios significativos en los datos o el esquema de tu base de datos, se puede crear una nueva de estadísticas puede beneficiar el rendimiento de las consultas. Como práctica recomendada, crea un nuevo paquete de estadísticas en los siguientes casos:

  • La base de datos procesa una gran cantidad de inserciones, actualizaciones o eliminaciones.
  • Agregarás un índice nuevo a la base de datos.
  • Agregas una nueva columna a una tabla.

Ejecuta una declaración DDL ANALYZE actualiza tu esquema e inicia operación de larga duración.

Cuando Spanner termina de ejecutar la instrucción, se pueden tardar hasta diez minutos para que el optimizador de consultas dé cuenta de un nuevo paquete de estadísticas en su la planificación de consultas.

Recolección de elementos no utilizados de paquetes de estadísticas

Los paquetes de estadísticas en Spanner se conservan durante un período de 30 días desde su creación y, luego, son sujetos a la recolección de elementos no utilizados.

Spanner integrado INFORMATION_SCHEMA.SPANNER_STATISTICS contiene una lista de los paquetes de estadísticas disponibles. Cada fila de esta tabla enumera un paquete de estadísticas por nombre, y este contiene la marca de tiempo de creación del paquete determinado. Cada entrada también contiene un campo llamado ALLOW_GC, que define si un paquete puede contener o no elementos no utilizados.

Puedes fijar toda tu base de datos a cualquiera de los paquetes enumerados en esa desde una tabla de particiones. El paquete de estadísticas fijado no se recolectará como elemento no utilizado y el valor del ALLOW_GC se ignorará siempre que la base de datos esté fijada a este paquete. Para usar un paquete de estadísticas específico para una consulta individual, se muestra con ALLOW_GC=FALSE o está fijada. Esto evita que las consultas fallen después el paquete de estadísticas se recolectó como elemento no utilizado. Puedes cambiar el valor de ALLOW_GC con ALTER STATISTICS de GoogleSQL o PostgreSQL ALTER STATISTICS declaración DDL.

Información de identificación personal (PII) y retención de paquetes

Un paquete de estadísticas contiene histogramas de los datos de la columna, según el estándar. prácticas de la industria. Esto ayuda al optimizador de consultas a seleccionar de los planes de negocios de los socios. El histograma se construye a través de una pequeña muestra de valores. Este pequeño del conjunto de datos podría contener PII.

Spanner crea un nuevo paquete de estadísticas con regularidad y lo retiene por 30 días de forma predeterminada. Así, se borra una pequeña muestra de valores la base de datos se puede retener por 30 días adicionales en histogramas de estadísticas. Paquetes de estadísticas fijados con la opción de base de datos optimizer_statistics_package o los paquetes con la opción ALLOW_GC=FALSE no se recolectarán como elementos no utilizados. Los histogramas de estos paquetes pueden contener valores borrados de la base de datos durante un período más largo. Además, el contenido de los paquetes de estadísticas se incluye en copias de seguridad de la base de datos.

Las estadísticas del optimizador se almacenan encriptadas del mismo modo que los datos del usuario.

La cantidad total de almacenamiento requerido para estos paquetes generalmente es inferior a 100 MB y sí se considera en los costos totales de almacenamiento.

¿Qué sigue?