El visualizador del plan de consultas te permite comprender rápidamente la estructura del plan de consultas que eligió Spanner para evaluar una consulta. En esta guía, se describe cómo puedes usar un plan de consultas para comprender la ejecución de tus consultas.
Antes de comenzar
Para familiarizarte con las partes de la Google Cloud interfaz de usuario de la console que se mencionan en esta guía, lee lo siguiente:
Ejecuta una consulta en la Google Cloud console
- Ve a la página Instancias de Spanner en Google Cloud laconsole.
-
Selecciona el nombre de la instancia que contiene la base de datos que deseas consultar.
Google Cloud laconsole muestra la página Descripción general de la instancia.
-
Selecciona el nombre de la base de datos que deseas consultar.
Google Cloud laconsole muestra la página Descripción general de la base de datos.
-
En el menú lateral, haz clic en Spanner Studio.
Google Cloud laconsole muestra la página Spanner Studio de la base de datos.
- Ingresa la consulta en SQL en el panel del editor.
-
Haz clic en Ejecutar.
Spanner ejecuta la consulta.
- Haz clic en la pestaña Explicación para ver la visualización del plan de consultas.
Un recorrido por el editor de consultas
La página de Spanner Studio proporciona pestañas de consultas que te permiten escribir o pegar consulta en SQL y sentencias de DML, ejecutarlas en tu base de datos y ver sus resultados y planes de ejecución de consultas. Los componentes clave de la página de Spanner Studio están numerados en la siguiente captura de pantalla.
- La barra de pestañas muestra las pestañas de consultas que tienes abiertas. Para crear una pestaña nueva, haz clic en Nueva pestaña.
También puedes usar Gemini Code Assist para obtener asistencia potenciada por IA asistencia. Para obtener más información, consulta Escribe código SQL con la ayuda de Gemini.
- La barra de comandos del editor proporciona estas opciones:
- El comando Ejecutar ejecuta las declaraciones ingresadas en el
panel de edición, lo que produce resultados de consultas en la pestaña Resultados y
planes de ejecución de consultas en la pestaña Explicación. Cambia el
comportamiento predeterminado con el menú desplegable para producir Solo resultados
o Solo explicación.
Si destacas algo en el editor, el comando Ejecutar cambia a Ejecutar lo seleccionado, lo que te permite ejecutar lo que seleccionaste.
- El comando Guardar te permite crear, guardar y administrar secuencias de comandos de SQL como consultas guardadas. Para obtener más información, consulta Descripción general de las consultas guardadas.
- El comando Formatear formatea las declaraciones en el editor para que sean más fáciles de leer.
- El comando Borrar borra todo el texto del editor y borra las subpestañas Resultados y Explicación.
- El vínculo Documentación abre una pestaña del navegador a Spanner documentación sobre la sintaxis de las consulta en SQL.
Las consultas se validan automáticamente cada vez que se actualizan en el editor. Si las declaraciones son válidas, la barra de comandos del editor muestra una marca de verificación de confirmación y el mensaje Válido. Si hay algún problema, muestra un mensaje de error con detalles.
- El comando Ejecutar ejecuta las declaraciones ingresadas en el
panel de edición, lo que produce resultados de consultas en la pestaña Resultados y
planes de ejecución de consultas en la pestaña Explicación. Cambia el
comportamiento predeterminado con el menú desplegable para producir Solo resultados
o Solo explicación.
- El editor es donde ingresas consulta en SQL y sentencias DML.
Las entradas están codificadas por color y los números de línea se agregan automáticamente para
las declaraciones de varias líneas.
Si ingresas más de una declaración en el editor, debes usar un punto y coma de finalización después de cada declaración, excepto la última.
- El panel inferior de una pestaña de consulta proporciona las siguientes subpestañas:
- La subpestaña Resultados muestra los resultados cuando ejecutas las
declaraciones en el editor. Para las consultas, muestra una tabla de resultados y
para las declaraciones de DML como
INSERTyUPDATEmuestra un mensaje sobre cuántas filas se vieron afectadas.De manera opcional, haz clic en Exportar para exportar los resultados de la consulta. Proporciona las siguientes opciones:
- Descargar CSV
- Descargar JSON
- Exportar a Hojas de cálculo de Google
- Copiar en el portapapeles (CSV)
- Copiar en el portapapeles (TSV)
- Copiar en el portapapeles (JSON)
- La subpestaña Explicación muestra gráficos visuales de los planes de consultas creados cuando ejecutas las declaraciones en el editor.
- La subpestaña Resultados muestra los resultados cuando ejecutas las
declaraciones en el editor. Para las consultas, muestra una tabla de resultados y
para las declaraciones de DML como
Visualiza los planes de consultas de muestra
- Ve a la página Instancias de Spanner en Google Cloud laconsole.
-
Haz clic en el nombre de la instancia con las consultas que deseas investigar.
Google Cloud laconsole muestra la página Descripción general de la instancia.
-
En el menú Navegación y en el encabezado Observabilidad, haz clic en Estadísticas de consultas.
Google Cloud laconsole muestra la página Estadísticas de consultas de la instancia.
-
En el menú desplegable Base de datos, selecciona la base de datos con las consultas que deseas investigar.
Google Cloud laconsole muestra la información de carga de consultas para la base de datos. En la tabla Consultas y etiquetas de TopN, se muestra la lista de las principales consultas y etiquetas de solicitud ordenadas por uso de CPU.
-
Busca la consulta con un uso alto de CPU para la que deseas ver planes de consultas de muestra. Haz clic en el valor FPRINT de esa consulta.
En la página Detalles de la consulta, se muestra un gráfico de Muestras de planes de consultas para tu consulta a lo largo del tiempo. Puedes alejar la imagen hasta un máximo de siete días antes de la hora actual. Nota: Los planes de consultas no son compatibles con las consultas con partitionTokens obtenidas de la API de PartitionQuery y consultas de DML particionado.
-
Haz clic en uno de los puntos del gráfico para ver un plan de consultas anterior y visualizar los pasos que se realizaron durante la ejecución de la consulta. También puedes hacer clic en cualquier operador para ver información expandida sobre el operador.
Figura 8. Gráfico de muestras de planes de consultas.
En algunos casos, es posible que desees ver planes de consultas de muestra y comparar el rendimiento de una consulta a lo largo del tiempo. Para las consultas que consumen más CPU, Spanner conserva los planes de consultas de muestra durante 30 días en la página Estadísticas de consultas de la Google Cloud console. Para ver los planes de consultas de muestra, haz lo siguiente:
Haz un recorrido por el visualizador del plan de consultas
Los componentes clave del visualizador se anotan en la siguiente captura de pantalla y se describen con más detalle. Después de ejecutar una consulta en una pestaña de consulta, selecciona la pestaña EXPLICACIÓN debajo del editor de consultas para abrir el visualizador del plan de ejecución de consultas.
El flujo de datos en el siguiente diagrama es de abajo hacia arriba, es decir, todas las tablas y los índices se encuentran en la parte inferior del diagrama y el resultado final está en la parte superior.
- La visualización de tu plan puede ser grande, según la consulta que ejecutaste. Para ocultar y mostrar detalles, activa o desactiva el selector de vista EXPANDIDA/COMPACTA. Puedes personalizar la cantidad del plan que ves en un momento determinado con el control de zoom.
- El álgebra que explica cómo Spanner ejecuta la consulta
se dibuja como un gráfico acíclico, en el que cada nodo corresponde a un
iterador que consume filas de sus entradas y produce filas para su
elemento superior. En la Figura 9 , se muestra un plan de muestra. Haz clic en el diagrama
para ver una vista expandida de algunos de los detalles del plan.
Figura 9. Plan visual de muestra (haz clic para acercar).
Cada nodo, o tarjeta, del gráfico representa un iterador y contiene la siguiente información:
- El nombre del iterador. Un iterador consume filas de su entrada y produce filas.
- Estadísticas de tiempo de ejecución que te indican cuántas filas se mostraron, cuál fue la latencia y cuánta CPU se consumió.
- Proporcionamos las siguientes señales visuales para ayudarte a identificar posibles problemas en el plan de ejecución de consultas.
- Las barras rojas de un nodo son indicadores visuales del porcentaje de latencia o tiempo de CPU para este iterador en comparación con el total de la consulta.
- El grosor de las líneas que conectan cada nodo representa el recuento de filas. Cuanto más gruesa sea la línea, mayor será la cantidad de filas que se pasen al siguiente nodo. La cantidad real de filas se muestra en cada tarjeta y cuando mantienes el puntero sobre un conector.
- Se muestra un triángulo de advertencia en un nodo en el que se realizó un análisis completo de la tabla. En el panel de información, se incluyen más detalles , como recomendaciones para agregar un índice o revisar la consulta o el esquema de otras maneras si es posible para evitar un análisis completo.
- Selecciona una tarjeta en el plan para ver los detalles en el panel de información de la derecha (5).
- El minimapa del plan de ejecución muestra una vista alejada del plan completo y es útil para determinar la forma general del plan de ejecución y para navegar rápidamente a diferentes partes del plan. Arrastra directamente en el minimapa o haz clic donde quieras enfocarte para ir a otra parte del plan visual.
Selecciona DESCARGAR JSON para descargar una versión JSON del plan de ejecución, que es útil para solucionar problemas. También puedes compartirlo cuando te comuniques con el equipo de Spanner para obtener asistencia. Si guardas el JSON, no se guarda el resultado de la consulta.
Para descargar y guardar una versión JSON del plan de ejecución para visualizarla más tarde, haz lo siguiente:
- En Spanner Studio, ejecuta una consulta.
- Selecciona la pestaña Explicación.
- Haz clic en DESCARGAR JSON para descargar la versión JSON del plan de ejecución.
- Guarda y copia el contenido del archivo JSON.
- Abre una nueva pestaña del editor de consultas.
- En la pestaña Editor, ingresa lo siguiente:
PROTO: CONTENT_OF_JSON
- Haz clic en Ejecutar.
- Selecciona la pestaña Explicación debajo del editor de consultas para ver a representación visual del plan de ejecución descargado.
- El panel de información muestra información contextual detallada sobre
el nodo seleccionado en el diagrama del plan de consultas. La información se
organiza en las siguientes categorías.
- Información del iterador proporciona detalles, así como estadísticas de tiempo de ejecución, para la tarjeta del iterador que seleccionaste en el gráfico.
- Resumen de la consulta proporciona detalles sobre la cantidad de filas que se muestran que se muestran y el tiempo que tardó en ejecutarse la consulta. Los operadores destacados son aquellos que muestran una latencia significativa, consumen una CPU significativa en relación con otros operadores y muestran cantidades significativas de filas de datos.
- Cronograma de ejecución de la consulta es un gráfico basado en el tiempo que muestra cuánto tiempo se ejecutó cada grupo de máquinas en su parte de la consulta. Es posible que un grupo de máquinas no se ejecute durante toda la duración del tiempo de ejecución de la consulta. También es posible que un grupo de máquinas se haya ejecutado varias veces durante la ejecución de la consulta, pero el cronograma aquí solo representa el inicio de la primera vez que se ejecutó y el final de la última vez que se ejecutó.
Ajusta una consulta que muestra un rendimiento deficiente
Imagina que tu empresa ejecuta una base de datos de películas en línea que contiene información sobre películas, como elenco, productoras, detalles de películas y mucho más. El servicio se ejecuta en Spanner, pero últimamente ha tenido algunos problemas de rendimiento.
Como desarrollador principal del servicio, se te pide que investigues estos problemas de rendimiento porque están causando calificaciones deficientes para el servicio. Abres la Google Cloud console, vas a la instancia de tu base de datos y, luego, abres el editor de consultas. Ingresas la siguiente consulta en el editor y la ejecutas.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
El resultado de ejecutar esta consulta se muestra en la siguiente captura de pantalla. Para formatear la consulta en el editor, seleccionamos FORMAT QUERY. También hay una nota en la parte superior derecha de la pantalla que nos indica que la consulta es válida.
En la pestaña RESULTADOS debajo del editor de consultas, se muestra que la consulta se completó en poco más de dos minutos. Decides observar más de cerca la consulta para ver si es eficiente.
Analiza la consulta lenta con el visualizador del plan de consultas
En este punto, sabemos que la consulta del paso anterior tarda más de dos minutos, pero no sabemos si la consulta es lo más eficiente posible y, por lo tanto, si se espera esta duración.
Selecciona la pestaña EXPLICACIÓN justo debajo del editor de consultas para ver una representación visual del plan de ejecución que Spanner creó para ejecutar la consulta y mostrar los resultados.
El plan que se muestra en la siguiente captura de pantalla es relativamente grande, pero, incluso en este nivel de zoom, puedes hacer las siguientes observaciones.
Según el Resumen de la consulta en el panel de información de la derecha, sabemos que se analizaron casi 3 millones de filas y, en última instancia, se mostraron menos de 64,000.
También podemos ver en el panel Cronograma de ejecución de la consulta que 4 grupos de máquinas participaron en la consulta. Un grupo de máquinas es responsable de la ejecución de una parte de la consulta. Es posible que los operadores se ejecuten en una o más máquinas. Si seleccionas un grupo de máquinas en el cronograma, se destaca en el plan visual qué parte de la consulta se ejecutó en ese grupo.
Debido a estos factores, decides que se puede mejorar el rendimiento si cambias la unión de una unión de aplicación, que Spanner eligió de forma predeterminada, a una unión de hash.
Mejora la consulta
Para mejorar el rendimiento de la consulta, usa una sugerencia de unión para cambiar el método de unión a una unión de hash. Esta implementación de unión ejecuta el procesamiento basado en conjuntos.
Esta es la consulta actualizada:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
En la siguiente captura de pantalla, se ilustra la consulta actualizada. Como se muestra en la captura de pantalla, la consulta se completó en menos de 5 segundos, lo que representa una mejora significativa con respecto al tiempo de ejecución de 120 segundos antes de este cambio.
Examina el nuevo plan visual, que se muestra en el siguiente diagrama, para ver qué nos dice sobre esta mejora.
De inmediato, notarás algunas diferencias:
Solo un grupo de máquinas participó en esta ejecución de consulta.
La cantidad de agregaciones se redujo de manera drástica.
Conclusión
En esta situación, ejecutamos una consulta lenta y observamos su plan visual para buscar ineficiencias. A continuación, se incluye un resumen de las consultas y los planes antes y después de que se realizaran los cambios. Cada pestaña muestra la consulta que se ejecutó y una vista compacta de la visualización completa del plan de ejecución de consultas.
Antes
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Después
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
Un indicador de que se podría mejorar algo en esta situación fue que una gran
proporción de las filas de la tabla title calificó el filtro LIKE
'% the %'. Es probable que la búsqueda en otra tabla con tantas filas sea costosa. Cambiar nuestra implementación de unión a una unión de hash mejoró el rendimiento de manera significativa.
¿Qué sigue?
Para obtener la referencia completa del plan de consultas, visita la página sobre planes de ejecución de consultas.
Para obtener la referencia completa del operador, consulta Operadores de ejecución de consultas.