En esta página se describe el optimizador de consultas de Spanner y sus ventajas. El optimizador de consultas está disponible para las bases de datos con dialecto GoogleSQL y PostgreSQL.
Información general
El optimizador de consultas de Spanner SQL convierte una instrucción SQL declarativa, que describe los datos que 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 en un plan de ejecución de consultas implica realizar transformaciones en estructuras de árbol que se usan para representar la consulta. El optimizador, durante el proceso de generación de un plan de ejecución, conserva el significado lógico de la consulta SQL original para que se devuelvan las filas correctas.
Otra función importante del optimizador es generar un plan de ejecución eficiente.
¿Cómo genera 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 costes para generar planes eficientes. Algunas heurísticas son muy sencillas, como "aplica filtros en máquinas remotas en lugar de extraer datos a la máquina local". Otras heurísticas son más complejas, pero siguen el principio de mover la lógica que reduce el volumen de datos más cerca de los datos. Este principio es especialmente importante en un sistema que fragmenta los datos en varias máquinas.
No todas las decisiones de ejecución se pueden tomar de forma eficaz con estas reglas fijas, por lo que el optimizador de Spanner también toma decisiones basadas en un coste estimado de las alternativas. Estas estimaciones de costes se calculan a partir de la estructura de la consulta, el esquema de la base de datos y las estimaciones del volumen de datos que generarán los fragmentos de la consulta. Por ejemplo, Spanner estima cuántas filas de la tabla Songs cumplen el filtro SongGenre = "Country"
si ese filtro aparece en una consulta. Para ayudar a calcular estas estimaciones, Spanner recoge periódicamente estadísticas para caracterizar la distribución de los datos de una base de datos.
Además, Spanner optimiza la ejecución de las consultas determinando automáticamente si se debe usar un método de procesamiento orientado a filas o a columnas para la consulta. Para obtener más información, consulta el artículo Optimizar 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 que determinan esas opciones, lo que dará lugar 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 las columnas de las tablas para ayudar a estimar cuántas filas se generarán con una consulta. El optimizador de consultas usa estas estimaciones para elegir el mejor plan de ejecución de consultas. Spanner actualiza estas estadísticas periódicamente. Como las estadísticas se usan para elegir planes de ejecución de consultas, cuando se actualizan, es posible que Spanner cambie el plan de consulta 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 en una versión anterior del paquete de estadísticas. También puedes ejecutar consultas individuales con un paquete de estadísticas que no sea el más reciente.
Construir 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 manualmente, usa la instrucción DDL de ANALYZE
de GoogleSQL o la instrucción DDL de ANALYZE
de PostgreSQL.
Después de hacer cambios significativos en los datos o el esquema de tu base de datos, puede ser útil crear un paquete de estadísticas nuevo para mejorar el rendimiento de las consultas. Te recomendamos que crees un paquete de estadísticas nuevo si ocurre lo siguiente:
- La base de datos procesa una gran cantidad de inserciones, actualizaciones o eliminaciones.
- Añades un nuevo índice a la base de datos.
- Añades una columna a una tabla.
Al ejecutar una instrucción DDL de ANALYZE
, se actualiza el esquema, se inicia una operación de larga duración y se cancela la creación de cualquier estadística activada automáticamente.
Una vez que Spanner termina de ejecutar la instrucción, 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 de Spanner se conservan durante 30 días desde su creación, tras lo cual se someten a la recogida 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 muestra un paquete de estadísticas por nombre. El nombre contiene la marca de tiempo de creación del paquete en cuestión. Cada entrada también contiene un campo llamado ALLOW_GC
que
define si un paquete se puede recoger como elemento no utilizado o no.
Puedes fijar toda tu base de datos a cualquiera de los paquetes que se indican en esa tabla. El paquete de estadísticas fijado no se eliminará y el valor de
ALLOW_GC
se ignorará mientras la base de datos esté fijada a este paquete. Para usar un paquete de estadísticas concreto en una consulta individual, el paquete debe aparecer en la lista con ALLOW_GC=FALSE
o estar fijado. De esta forma, se evita que las consultas fallen después de que se haya recogido el paquete de estadísticas. Puede cambiar el valor de ALLOW_GC
mediante la instrucción DDL ALTER STATISTICS
de GoogleSQL o ALTER STATISTICS
de PostgreSQL.
Conservación de paquetes e información personal identificable (IPI)
Un paquete de estadísticas contiene histogramas de los datos de las columnas, según las prácticas estándar del sector. De esta forma, el optimizador de consultas puede seleccionar los planes de consulta óptimos. El histograma se crea a partir de una pequeña muestra de valores. Este pequeño conjunto de datos puede contener información personal identificable.
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, es posible que se conserve una pequeña muestra de los valores eliminados de la base de datos durante 30 días más en los histogramas de estadísticas.
Los paquetes de estadísticas fijados con la opción de optimizer_statistics_package
base de datos
o los paquetes con la opción ALLOW_GC=FALSE
no se eliminarán.
Los histogramas de estos paquetes pueden contener valores eliminados de la base de datos durante un periodo 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 cifradas de la misma forma que los datos de usuario.
La cantidad total de almacenamiento que requieren estos paquetes suele ser inferior a 100 MB y se tiene en cuenta en los costes totales de almacenamiento.
Siguientes pasos
- Para obtener más información sobre el historial del optimizador de consultas, consulte el historial de versiones del optimizador de consultas.
- Para gestionar tanto la versión del optimizador como el paquete de estadísticas de tu escenario, consulta Gestionar el optimizador de consultas.