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, 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 en estructuras de árbol usadas 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ísticas consolidadas 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 esas reglas fijas, por lo que el optimizador de Spanner también toma decisiones en función de un 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 a fin de caracterizar la distribución de los datos en una base de datos.

Además, Spanner optimiza la ejecución de consultas determinando 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.

Si deseas obtener más información sobre los planes de ejecución de consultas y cómo Spanner los usa para realizar consultas en un entorno distribuido, visita 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 en el plan de ejecución de consultas y mejorará la precisión de las estimaciones que informan esas elecciones, lo que lleva a 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 las 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 ayudar a estimar 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 las estadísticas se actualizan, Spanner es posible que 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 un paquete de estadísticas que no sea el más reciente.

Crea un nuevo paquete de estadísticas

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

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

  • La base de datos procesa una gran cantidad de inserciones, actualizaciones o eliminaciones.
  • Agregas un índice nuevo a la base de datos.
  • Agregas una columna nueva 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 demora hasta diez minutos en considerar un paquete de estadísticas nuevo en la planificación de las 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 quedan sujetos a la recolección de elementos no utilizados.

La tabla INFORMATION_SCHEMA.SPANNER_STATISTICS integrada de Spanner contiene una lista de paquetes de estadísticas disponibles. Cada fila de esta tabla enumera 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 recolectado como elemento no utilizado o no.

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

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 muestra pequeña 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, es posible que una pequeña muestra de los valores borrados de la base de datos se conserve durante 30 días adicionales en histogramas de estadísticas. Los paquetes estadísticos fijados con la opción de base de datos optimizer_statistics_package o 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 de la misma manera que los datos del usuario.

La cantidad total de almacenamiento necesario para estos paquetes suele ser inferior a 100 MB y se considera en tus costos totales de almacenamiento.

¿Qué sigue?