Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Ajusta una consulta con el visualizador del plan de consultas

El visualizador del plan de consulta te permite comprender con rapidez la estructura del plan que elige Cloud Spanner para evaluar una consulta. En esta guía, veremos cómo usar esta representación visual de un plan de consulta para ayudarte a comprender la ejecución de tus consultas.

Antes de comenzar

Para familiarizarte con las partes de la interfaz de usuario de Cloud Console que se mencionan en esta guía, lee lo siguiente:

Ejecuta una consulta en Cloud Console:

  1. En Cloud Console, navega a la página Instancias de Cloud Spanner.

    Ir a la página Instancias

  2. Selecciona el nombre de la instancia que deseas consultar.
  3. En el panel izquierdo, haz clic en la base de datos que deseas consultar y, luego, haz clic en Consultar.
  4. Ingresa la consulta que deseas probar.
  5. Selecciona Ejecutar consulta para ejecutar la consulta. Cloud Spanner ejecuta la consulta y, cuando se completa, muestra la visualización del plan de consultas en la pestaña Explicación.

Un recorrido por el editor de consultas

Con el editor de consultas de Cloud Console, puedes escribir o pegar declaraciones de consulta y ejecutarlas en tu base de datos.Los componentes clave del editor de consultas se enumeran en la siguiente captura de pantalla.

Editor de consultas anotados
Figura 7. Editor de consultas anotados.
  1. Usa el elemento de menú EJECUTAR para ejecutar la consulta que ingresaste en el panel de edición. El comportamiento predeterminado es ejecutar la declaración en el editor, lo que produce resultados de consulta en la pestaña RESULTS y el plan visual de ejecución en la pestaña SOCIAL. Cambia el comportamiento predeterminado con el menú desplegable a fin de producir Solo resultados o Solo explicación. Cuando se destaca algo en el editor, se cambia el comando RUN por RUN SELECTED, lo que le permite ejecutar solo lo que seleccionó.
  2. Para borrar el editor, selecciona BORRAR CONSULTA.
  3. El comando FORMAT QUERY formatea las declaraciones en el editor para que sean más fáciles de leer.
  4. El comando Escribir datos de código muestra el conjunto de combinaciones de teclas que puedes usar con el editor.
  5. Las consultas se validan automáticamente cada vez que se actualizan en el editor. Si las declaraciones son válidas, se muestra una marca de verificación y el mensaje valid. Si hay algún problema, verás un mensaje de error con los detalles.
  6. En el panel de edición, debes ingresar las consultas. Están codificados en color y los números de línea se agregan automáticamente para las declaraciones de varias líneas.

Un recorrido por el visualizador del plan de consulta

Los componentes clave del visualizador se anotan en la siguiente captura de pantalla y se describen con más detalle. Cuando ejecutes una consulta en el editor de consultas de Cloud Console, selecciona la opciónSUGERENCIA pestaña debajo del editor de consultas para abrir el visualizador del plan de ejecución de consultas.

El flujo de datos en el siguiente diagrama está hacia arriba, es decir, todas las tablas y los índices están en la parte inferior del diagrama y el resultado final está en la parte superior.

Visualizador de planes de consultas anotados
Figura 8. Visualizador de planes de consultas anotados
  1. La visualización de tu plan puede ser grande, según la consulta que hayas ejecutado. Para ocultar y mostrar detalles, activa o desactiva el selector de vistas EXPANDED/analyze. Con el control de zoom, puedes personalizar cuánto quieres ver en cualquier momento.
  2. El álgebra que explica cómo Cloud Spanner ejecuta la consulta se dibuja como un grafo acíclico, en el que cada nodo corresponde a un iterador que consume filas de sus entradas y produce filas en la superior. Puedes ver un plan de muestra en la Figura 9. Haz clic en el diagrama para ver una vista expandida de algunos detalles del plan.

    Miniatura de la captura de pantalla del plan visual
    Figura 9. Ejemplo de plan visual (haz clic para acercar)
    Captura de pantalla con zoom de zoom visual

    Cada nodo o tarjeta en el grafo representa un iterador y contiene la siguiente información:

    • Nombre del iterador. Un iterador consume filas de su entrada y produce filas.
    • Las estadísticas del entorno de ejecución te indican cuántas filas se mostraron, cuál fue la latencia y cuánta batería se consumió.
    • Proporcionamos los siguientes indicadores visuales para ayudarte a identificar posibles problemas dentro del plan de ejecución de consultas.
    • Las barras rojas en 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 pasadas al siguiente nodo. La cantidad real de filas se muestra en cada tarjeta y cuando te desplazas 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. Si es posible, se incluyen más detalles en el panel informativo, como agregar un índice, o revisar la consulta o el esquema de otras maneras para evitar un análisis completo.
    • Selecciona una tarjeta del plan para ver los detalles en el panel de información a la derecha (5).

  3. 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 navegar a diferentes partes del plan rápidamente. Arrastra directamente sobre el minimapa o haz clic en la ubicación donde desees centrar para navegar a otra parte del plan visual.
  4. Selecciona DESCARGAR JSON para descargar una versión JSON del plan de ejecución, que es útil cuando te comunicas con el equipo de Cloud Spanner a fin de obtener asistencia.
  5. En el panel de información, se muestra información contextual detallada sobre el nodo seleccionado en el diagrama del plan de consultas. La información está organizada en las siguientes categorías.
    • La información de iterador proporciona detalles, así como estadísticas de entorno de ejecución, para la tarjeta del iterador que seleccionaste en el grafo.
    • Resumen de consultas proporciona detalles sobre la cantidad de filas mostradas y el tiempo que tardó en ejecutarse la consulta. Los operadores destacados son aquellos que muestran una latencia significativa, consumen una CPU significativa respecto de otros operadores y muestran cantidades significativas de filas de datos.
    • Cronograma de ejecución de la consulta es un grafo basado en el tiempo que muestra cuánto tiempo ejecutó cada grupo de máquinas su parte de la consulta. Es posible que un grupo de máquinas no siempre se ejecute durante todo el tiempo de ejecución de la consulta. También es posible que un grupo de máquinas se ejecute varias veces durante el curso de 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 corrió.

Ajusta una consulta que muestre un rendimiento bajo

Imagina que tu empresa ejecuta una base de datos de películas en línea que contiene información sobre películas como el reparto, las empresas de producción, los detalles de películas y mucho más. El servicio se ejecuta en Cloud Spanner, pero ha experimentado algunos problemas de rendimiento últimamente.

Como desarrollador líder del servicio, se te solicita que investigues estos problemas de rendimiento porque generan calificaciones bajas para el servicio. Abre Cloud Console, navega hasta la instancia de tu base de datos y, luego, abre el editor de consultas. Ingresa la siguiente consulta en el editor y ejecútala.

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 dar formato a la consulta en el editor, selecciona FORMAT QUERY. También hay una nota en la esquina superior derecha de la pantalla que indica que la consulta es válida.

Editor de consultas que muestra una consulta original
Figure 1. Editor de consultas que muestra la consulta original.

La pestaña RESULTADOS debajo del editor de consultas muestra que la consulta se completó en aproximadamente dos minutos. Decides observar más de cerca la consulta para ver si la consulta es eficiente.

Analizar nuestra consulta lenta con el visualizador del plan de consulta

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 esa duración.

Selecciona la pestaña SOCIAL justo debajo del editor de consultas para ver una representación visual del plan de ejecución que Cloud Spanner creó para ejecutar la consulta y mostrar resultados.

El plan que se muestra en la siguiente captura de pantalla es relativamente grande, pero, en este nivel de zoom, puedes hacer las siguientes observaciones.

  • Según el resumen de consultas que se encuentra en el panel de información a la derecha, descubrimos que se analizaron casi 3 millones de filas y menos de 64 K se mostraron.

  • 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 ejecutar una parte de la consulta. Los operadores pueden ejecutarse en una o más máquinas. Cuando 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.

Visor de reproducción de consultas que muestra una explicación visual de la consulta original
Figura 2: El visualizador de reproducción de consultas muestra el plan visual de la consulta original.

Debido a estos factores, tú decides que una mejora en el rendimiento puede ser posible si cambias la unión de una unión de opciones que Cloud 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 a fin de cambiar el método de combinación a una unión 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, una mejora significativa en el tiempo de ejecución de 120 segundos antes de este cambio.

Editor de consultas que muestra una consulta mejorada
Figura 3. Editor de consultas que muestra la consulta mejorada.

Examinemos el nuevo plan visual, que se muestra en el siguiente diagrama, para ver lo que nos dice sobre esta mejora.

Visualización de consultas en la IU de Cloud Console
Figura 4. Visualización del plan de consultas después de las mejoras (haz clic para acercar)

Captura de pantalla con zoom de zoom visual

De inmediato, notas algunas diferencias:

  • En esta ejecución de consulta, solo se involucraba un grupo de máquinas.

  • La cantidad de agregaciones se redujo drásticamente.

Conclusión

En esta situación, ejecutamos una consulta lenta y revisamos su plan visual para buscar ineficiencias. A continuación, se muestra un resumen de las consultas y los planes anteriores y posteriores a los cambios realizados. Cada pestaña muestra la consulta que se ejecutó y una vista compacta de la visualización del plan de ejecución de consultas completa.

Antes del

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;
Vista compacta del plan visual antes de realizar mejoras
Figura 5. Vista compacta del plan visual antes de realizar mejoras.

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;
Vista compacta del plan visual después de las mejoras.
Figura 6. Vista compacta del plan visual después de las mejoras.

Un indicador de que algo que se podría mejorar en esta situación es que una gran proporción de las filas de la tabla title calificaron el filtro LIKE '% the %'. Buscar una tabla con tantas filas es probable que sea costoso. Cambiar nuestra implementación de unión a una unión de hash mejoró significativamente el rendimiento.

Qué sigue