Acerca del optimizador de consultas

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

¿Qué es un optimizador de consultas?

El optimizador de consultas SQL de Cloud Spanner convierte una instrucción de SQL declarativa, que describe qué datos desea la consulta, en un plan de ejecución imperativo, que describe una forma de obtener esos datos de forma precisa. El proceso de transformación de una declaración declarativa en un plan de ejecución de consultas implica realizar transformaciones a estructuras de árboles que se usan para representar la consulta. El optimizador, en el proceso de producir un plan de ejecución, conserva el significado lógico de la consulta de SQL original para que se muestren las filas correctas.

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

¿De qué manera el optimizador de Spanner produce planes de ejecución eficientes?

El optimizador de Spanner usa una combinación de heurísticas bien establecidas y optimizaciones basadas en los costos para producir planes eficientes. Algunas heurísticas son muy sencillas, como aplicar 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 basadas en un costo estimado de alternativas. Estas estimaciones de costos se calculan mediante 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 de canciones califican el filtro SongGenre = "Country" si ese filtro aparece en una consulta. Para ayudar en 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.

A fin de obtener más información sobre los planes de ejecución de consultas y cómo los usa Cloud 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 Cloud Spanner evolucionará, ampliando el conjunto de opciones del plan de ejecución de consultas y mejorando la precisión de las estimaciones que aportan información a esas opciones, lo que genera planes de ejecución de consultas más eficientes.

Spanner lanza actualizaciones del optimizador de consultas como nuevas versiones del optimizador de consultas para mejorar la eficiencia de los planes de ejecución de consultas. Si deseas obtener más información sobre las diferentes versiones, visita Versiones del optimizador de consultas de Cloud 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 calcular cuántas filas generará una consulta. El optimizador de consultas usa estas estimaciones para ayudarte 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 los planes de ejecución de consultas, cuando se actualizan las estadísticas, es posible que Spanner cambie el plan de consultas que usa para una consulta.

De forma predeterminada, las bases de datos usan de forma automática el paquete de estadísticas más reciente. Puedes fijar tu base de datos en 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 automáticamente un nuevo paquete de estadísticas cada tres días. Para crear un paquete de estadísticas nuevo de forma manual, usa la declaración DDL ANALYZE.

Compilar un paquete de estadísticas nuevo puede beneficiar el rendimiento de las consultas luego de cambios significativos en el esquema o los datos de la base de datos, incluidos los siguientes:

  • La base de datos procesa una gran cantidad de inserciones, actualizaciones o eliminaciones.
  • Agregas un índice nuevo a la base de datos.
  • Debes agregar 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.

Después de que Spanner termina de ejecutar la declaración, el optimizador de consultas tarda hasta diez minutos en tener en cuenta un paquete de estadísticas nuevo en su planificación.

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. Luego de ese período, 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 enumera un paquete de estadísticas por nombre, y el nombre contiene la marca de tiempo de creación del paquete dado. Cada entrada también contiene un campo llamado ALLOW_GC que define si un paquete puede ser una recolección de elementos no utilizados o no.

Puedes fijar toda la base de datos en cualquiera de los paquetes que se enumeran en esa tabla. No se recolectará el paquete de estadísticas fijadas y se ignorará el valor de ALLOW_GC, siempre y cuando la base de datos esté fijada a este paquete. A fin de usar un paquete de estadísticas en particular para una consulta individual, el paquete debe aparecer con ALLOW_GC=FALSE o fijado. Esto evita que las consultas fallen después de que el paquete de estadísticas se haya recolectado. El valor de ALLOW_GC se puede cambiar mediante la declaración DDL 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 consultas óptimos. El histograma se crea con una pequeña muestra de valores. Este conjunto de datos pequeño puede contener PII.

Spanner crea un nuevo paquete de estadísticas de forma periódica y lo conserva durante 30 días de forma predeterminada. Por lo tanto, una pequeña muestra de los valores borrados de la base de datos puede retenerse 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 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 necesario para estos paquetes suele ser inferior a 100 MB y sí se tiene en cuenta para el costo de almacenamiento total.

¿Qué sigue?