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 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 heurísticas bien establecidas 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 Es SongGenre = "Country" si ese filtro aparece en una consulta. Para ayudar al cálculo de esas estimaciones, Spanner recopila estadísticas periódicamente para caracterizar la distribución de los datos en una base de datos.

Además, Spanner optimiza la ejecución de consultas determinando automáticamente 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 las búsquedas.

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á y ampliará el conjunto de opciones en el plan de ejecución de consultas y mejorará la precisión de las estimaciones que informan esas opciones, lo que llevará a planes de ejecución de consultas más eficientes.

Spanner lanza actualizaciones del optimizador como nuevas versiones 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 la tabla columnas para ayudar a estimar cuántas filas producirá una consulta. La consulta 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. Dado 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 paquete de estadísticas generado más reciente. 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 paquete de estadísticas nuevo cada tres días. Para crear un paquete de estadísticas nuevo de forma manual, usa la instrucción DDL ANALYZE de Google SQL o la instrucción DDL ANALYZE de PostgreSQL.

Después de realizar cambios significativos en los datos o el esquema de tu base de datos, la compilació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 columna nueva a una tabla.

Ejecutar una sentencia DDL ANALYZE actualiza tu esquema, inicia una operación de larga duración y cancela la creación de cualquier estadística activada automáticamente.

Después de que Spanner termina de ejecutar la sentencia, el optimizador de consultas tarda hasta diez minutos en tener en cuenta un nuevo paquete de estadísticas en su 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.

La tabla INFORMATION_SCHEMA.SPANNER_STATISTICS integrada en Spanner 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 se puede eliminar o no.

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 de que se haya recolectado el paquete de estadísticas. Puedes cambiar el valor de ALLOW_GC con ALTER STATISTICS de GoogleSQL o PostgreSQL ALTER STATISTICS declaración DDL.

Retención de paquetes y datos de identificación personal (PII)

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. Por lo tanto, una pequeña muestra de valores borrados de la base de datos se puede retener durante 30 días adicionales en los 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 las copias de seguridad de la base de datos.

Las estadísticas del optimizador se almacenan encriptadas de la misma manera 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?