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 necesita la consulta en un plan de ejecución imperativo y que describe una forma de obtener esos datos con precisión. El proceso de transformación de una declaración declarativa en un plan de ejecución de consultas implica realizar transformaciones en las estructuras de árbol utilizadas para representar la consulta. El optimizador, en el proceso de producción de un plan de ejecución, conserva el significado lógico de la consulta en SQL original para que se muestren las filas correctas.

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

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

El optimizador de Spanner usa una combinación de heurística bien establecida y optimización basada en costos para producir planes eficientes. Algunas heurísticas son muy sencillas, como “realizar filtros en máquinas remotas en lugar de extraer datos 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 de manera eficaz con estas reglas fijas, por lo que el optimizador de Spanner también toma decisiones basadas en el costo estimado de las alternativas. Estas estimaciones de costos se calculan con la estructura de la consulta, el esquema de la base de datos y las estimaciones del volumen de datos que producirán los fragmentos de la consulta. Por ejemplo, Spanner estimará cuántas filas de la tabla Canciones califican el filtro SongGenre = "Country" si ese filtro aparece en una consulta. Para facilitar el cálculo de esas estimaciones, Spanner recopila estadísticas de forma periódica para caracterizar la distribución de los datos en una base de datos.

Además, Spanner optimiza la ejecución de consultas porque determina de forma automática si se debe usar un método de procesamiento orientado a filas o columnas para 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 usa 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á, lo que ampliará el conjunto de opciones del plan de ejecución de consultas y mejorará la precisión de las estimaciones en las que se basarán esas elecciones, lo que generará planes de ejecución de consultas más eficientes.

Spanner lanza actualizaciones del optimizador como versiones nuevas del optimizador de consultas para mejorar la eficiencia de sus planes de ejecución de consultas. 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 las columnas de la tabla para calcular cuántas filas producirá una consulta. El optimizador de consultas 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 las estadísticas se usan para elegir planes de ejecución de consultas, cuando se actualizan, es posible que Spanner cambie el plan de consultas que usa en 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 un paquete de estadísticas distinto del más reciente.

Crea un nuevo paquete de estadísticas

Spanner genera de forma automática un paquete de estadísticas nuevo cada tres días. Para construir un nuevo paquete de estadísticas de forma manual, usa la declaración DDL ANALYZE de GoogleSQL o la declaración DDL ANALYZE de PostgreSQL.

Después de realizar cambios significativos en los datos o el esquema de tu base de datos, la construcción de un nuevo paquete de estadísticas puede beneficiar el rendimiento de las consultas. Como práctica recomendada, crea un paquete de estadísticas nuevo si ocurre lo siguiente:

  • 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.

La ejecución de una declaración DDL ANALYZE actualiza tu esquema y, luego, inicia una operación de larga duración.

Una vez que Spanner termina de ejecutar la instrucción, el optimizador de consultas puede tardar hasta diez minutos en considerar un nuevo paquete de estadísticas en 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, después de lo cual están sujetos a la recolección de elementos no utilizados.

La tabla INFORMATION_SCHEMA.SPANNER_STATISTICS integrada de Spanner contiene una lista de los paquetes de estadísticas disponibles. Cada fila de esta tabla muestra un paquete de estadísticas por nombre, y el nombre 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 ser o no como elemento no utilizado.

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

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 la práctica estándar de la industria. Esto ayuda al optimizador de consultas a seleccionar los planes de consulta óptimos. El histograma se construye con una pequeña muestra de valores. Este conjunto de datos pequeño puede contener PII.

Spanner crea un paquete de estadísticas nuevo de forma periódica y lo conserva durante 30 días de forma predeterminada. Por lo tanto, una pequeña muestra de valores borrados de la base de datos puede conservarse durante 30 días adicionales en histogramas de estadísticas. Los 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 las copias de seguridad de las bases 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 suele ser inferior a 100 MB y se considera en los costos totales de almacenamiento.

¿Qué sigue?