Ajustar una consulta con el visualizador del plan de consultas

El visualizador del plan de consultas te permite comprender con rapidez la estructura del plan de consultas que eligió Spanner para evaluar una consulta. En esta guía, se describe cómo usar un plan de consultas para comprender la ejecución de tus consultas.

Antes de comenzar

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

Ejecuta una consulta en la consola de Google Cloud

  1. Ve a la página Instancias de Spanner en la consola de Google Cloud.

    Ir a la página Instancias

  2. Selecciona el nombre de la instancia que contiene la base de datos que deseas consultar.

    La consola de Google Cloud muestra la página Descripción general de la instancia.

  3. Selecciona el nombre de la base de datos que deseas consultar.

    La consola de Google Cloud muestra la página Descripción general de la base de datos.

  4. En el menú lateral, haz clic en Spanner Studio.

    La consola de Google Cloud muestra la página de Spanner Studio de la base de datos.

  5. Ingresa la consulta en SQL en el panel del editor.
  6. Haz clic en Ejecutar.

    Spanner ejecuta la consulta.

  7. Haz clic en la pestaña Explicación para ver la visualización del plan de consultas.

Un recorrido por el editor de consultas

En la página de Spanner Studio, se proporcionan pestañas de consulta que te permiten escribir o pegar consulta en SQL y declaraciones DML, ejecutarlas en tu base de datos y ver sus resultados y planes de ejecución de consultas. En la siguiente captura de pantalla, los componentes clave de la página de Spanner Studio están numerados.

Página de consultas con anotaciones
Figura 7. Página Consulta anotada.
  1. En la barra de pestañas, se muestran las pestañas de consulta que tienes abiertas. Para crear una pestaña nueva, haz clic en Nueva pestaña.

    La barra de pestañas también proporciona una lista de Plantillas de consulta puedes usar la información para pegar consultas que proporcionen estadísticas sobre consultas de bases de datos, transacciones, lecturas y mucho más, como se describe en Descripción general de las herramientas de introspección.

  2. La barra de comandos del editor proporciona estas opciones:
    • El comando Run ejecuta las instrucciones ingresadas en el panel de edición, lo que genera 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 ver Solo resultados o Solo explicación.

      Si destacas un elemento en el editor, se cambia el comando Run a Run selected, lo que te permite ejecutar solo lo que seleccionaste.

    • El comando Borrar consulta borra todo el texto del editor y las pestañas secundarias Resultados y Explicación.
    • El comando Formatear consulta formatea las declaraciones en el editor para que sean más fáciles de leer.
    • El comando Shortcuts muestra el conjunto de combinaciones de teclas que puedes usar en el editor.
    • El vínculo Ayuda para consultas de SQL abre una pestaña del navegador y accede a la documentación sobre la sintaxis de consulta en SQL.

    Las consultas se validan de forma automática cada vez que se actualizan en el editor. Si las declaraciones son válidas, la barra de comandos del editor mostrará una marca de verificación de confirmación y el mensaje Valid. Si hay algún problema, muestra un mensaje de error con los detalles.

  3. En el editor, puedes ingresar consulta en SQL y declaraciones DML. Se codifican por color y los números de línea se agregan automáticamente en 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.

  4. El panel inferior de una pestaña de consulta proporciona tres pestañas secundarias:
    • En la pestaña secundaria Esquema, se muestran las tablas de la base de datos y sus esquemas. Úsalo como referencia rápida cuando redactes declaraciones en el editor.
    • En la pestaña secundaria Resultados, se muestran los resultados cuando ejecutas las instrucciones en el editor. En el caso de las consultas, se muestra una tabla de resultados y, en el caso de las declaraciones DML, como INSERT y >UPDATE, se muestra un mensaje sobre cuántas filas se vieron afectadas.
    • En la pestaña secundaria Explicación, se muestran gráficos visuales de los planes de consulta creados cuando ejecutas las instrucciones en el editor.
  5. Las pestañas secundarias Resultados y Explicación proporcionan un selector de declaraciones que usas para elegir los resultados o el plan de consulta de la declaración que deseas.

Ver planes de consultas de muestra

    En algunos casos, es posible que quieras ver los 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 retiene los planes de consulta de muestra durante 30 días en la página Estadísticas de consultas de la consola de Google Cloud. Para ver los planes de consultas de muestra, haz lo siguiente:

  1. Ve a la página Instancias de Spanner en la consola de Google Cloud.

    Ir a la página Instancias

  2. Haz clic en el nombre de la instancia con las consultas que quieres investigar.

    La consola de Google Cloud muestra la página Descripción general de la instancia.

  3. En el Menú de navegación, debajo del encabezado Observabilidad, haz clic en Estadísticas de consultas.

    La consola de Google Cloud muestra la página Estadísticas de consultas de la instancia.

  4. En el menú desplegable Base de datos, selecciona la base de datos con las consultas que deseas investigar.

    La consola de Google Cloud muestra la información de carga de consultas de la base de datos. En la tabla Consultas y etiquetas de TopN, se muestra la lista de consultas principales y etiquetas de solicitud ordenadas según el uso de CPU.

  5. Busca la consulta con un uso de CPU elevado para la que quieres ver los planes de consulta de muestra y haz clic en el valor FPRINT de esa consulta.

    En la página Detalles de la consulta, se muestra un gráfico de ejemplos de planes de consulta para tu consulta a lo largo del tiempo. Puedes alejarte hasta siete días antes de la hora actual. Nota: Los planes de consultas no son compatibles con las consultas con particionamientos obtenidos de la API de Partición de consulta y consultas de DML particionado.

  6. Haz clic en uno de los puntos del gráfico para ver un plan de consultas anterior y ver 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 él.

    Gráfico de muestras del plan de consultas
    Figure 8. Gráfico de muestras del plan de consultas.

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 en más detalle. Después de ejecutar una consulta en una pestaña de consultas, selecciona la pestaña EXPLANATION debajo del editor de consultas para abrir el visualizador del plan de ejecución de consultas.

El flujo de datos del siguiente diagrama es de abajo 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 del plan de consultas anotado
Figura 9: Visualizador del plan de consultas anotado.
  • 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 la vista EXPANDED/COMPACT. Puedes personalizar en cualquier momento qué parte del plan deseas ver con el control de zoom.
  • El álgebra que explica cómo 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 para su elemento superior. En la Figura 9, se incluye un plan de muestra. Haz clic en el diagrama para obtener una vista expandida de algunos de los detalles del plan.

    Miniatura de captura de pantalla del plan visual
    Figura 9: Ejemplo de un plan visual (haz clic para acercar).
    Captura de pantalla con acercamiento del plan visual

    Cada nodo, o tarjeta, en el gráfico representa un iterador y contiene la siguiente información:

    • Es el nombre del iterador. Un iterador consume filas de su entrada y produce filas.
    • Estadísticas de tiempo de ejecución que indican cuántas filas se mostraron, cuál fue la latencia y cuánta CPU se consumió.
    • Proporcionamos las siguientes indicaciones 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 de 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á el número de filas que se pasarán 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. Los detalles adicionales en el panel de información incluyen recomendaciones, como 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 el minimapa o haz clic donde deseas centrarte 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 cuando te comunicas con el equipo de Spanner para obtener asistencia.
  • 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 se organiza en las siguientes categorías.
    • La información del iterador proporciona detalles, así como estadísticas del tiempo de ejecución, de la tarjeta del iterador que seleccionaste en el grafo.
    • En Resumen de la consulta, se proporcionan detalles sobre la cantidad de filas que se muestran y el tiempo que llevó ejecutar la consulta. Los operadores destacados son aquellos que exhiben una latencia significativa, consumen una CPU significativa en relación con otros operadores y muestran una cantidad significativa de filas de datos.
    • El cronograma de ejecución de consultas 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 esté necesariamente en ejecución 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 transcurso de la consulta, pero el cronograma 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 bajo

    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 solicita que investigues estos problemas de rendimiento, ya que generan calificaciones deficientes del servicio. Abre la consola de Google Cloud, ve a tu instancia de base de datos y, luego, abre 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 la ejecución de 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 indica que la consulta es válida.

    Editor de consultas que muestra la 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 poco más de dos minutos. Decides examinar la consulta con más detalle para ver si es eficiente.

    Analiza una 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 es lo más eficiente posible y, por lo tanto, si se espera esta duración.

    Selecciona la pestaña EXPLICACIÓN (EXPLANATION) justo debajo del editor de consultas para ver una representación visual del plan de ejecución que creó Spanner 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 observaciones siguientes.

    • Según el Resumen de la consulta en el panel de información de la derecha, descubrimos que se analizaron casi 3 millones de filas y que, en última instancia, se mostraron menos de 64,000.

    • En el panel Cronograma de ejecución de consultas, también podemos ver 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. Los operadores pueden ejecutarse en una o más máquinas. Cuando seleccionas un grupo de máquinas en el cronograma, se destaca el plan visual sobre qué parte de la consulta se ejecutó en ese grupo.

    Visualizador del plan de consultas que muestra una explicación visual de la consulta original
    Figura 2: Visualizador del plan de consultas que muestra el plan visual de la consulta original.

    Debido a estos factores, decides que es posible 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 hash.

    Mejora la consulta

    Si deseas mejorar el rendimiento de la consulta, usa una sugerencia de unión para cambiar el método de unió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 muestra la consulta actualizada. Como se muestra en la captura de pantalla, la consulta se completa en menos de 5 segundos, una mejora significativa en más de 120 segundos de tiempo de ejecución antes de este cambio.

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

    Examina el nuevo plan visual, que se muestra en el siguiente diagrama, para ver qué nos dice sobre esta mejora.

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

    Captura de pantalla con acercamiento del plan visual

    Inmediatamente, notas algunas diferencias:

    • Solo un grupo de máquinas participó en la ejecución de esta consulta.

    • La cantidad de agregaciones se redujo de forma drástica.

    Conclusión

    En esta situación, ejecutamos una consulta lenta y observamos su plan visual para buscar ineficiencias. El siguiente es un resumen de las consultas y los planes antes y después de cualquier cambio. En cada pestaña, se 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;
    
    Vista compacta del plan visual antes de las mejoras.
    Figura 5. Vista compacta del plan visual antes de las 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 se podría mejorar algo en esta situación fue que una gran proporción de las filas de la tabla title calificaron el filtro LIKE '% the %'. Buscar otra tabla con tantas filas puede ser costoso. Cambiar nuestra implementación de unión a una unión hash mejoró el rendimiento de manera significativa.

    ¿Qué sigue?