Soluciona problemas de rendimiento de las búsquedas con las estadísticas de consultas

En esta página, se describe cómo usar el panel de Query Insights para detectar y analizar problemas de rendimiento. Para obtener más información, consulta Descripción Query Insights.

Antes de comenzar

Si tú o otros usuarios necesitan ver el plan de consulta o realizar un seguimiento de extremo a extremo, necesitas permisos de IAM específicos para hacerlo. Puedes crear una función personalizada y agregarle los permisos de IAM necesarios. Luego, puedes agregar esta función a cada cuenta de usuario que usará las consultas de consulta para solucionar un problema. Consulta Crea una función personalizada.

La función personalizada debe tener el siguiente permiso de IAM.

  • cloudtrace.traces.get

Abre el panel de estadísticas de consultas

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.
    Ir a la página Instancias de Cloud SQL
  2. Haz clic en el nombre de una instancia para navegar a la página Descripción general.

  3. Para abrir el panel de estadísticas de consultas, selecciona la pestaña Estadísticas de consultas o haz clic en Ir a estadísticas de consultas para obtener información más detallada sobre las consultas y el rendimiento.

    Figura 1. Abre el panel Estadísticas de consulta mediante la pestaña Estadísticas de consulta o el ícono que se encuentra en la parte inferior del gráfico
    Figura 1. Formas de abrir el panel de Query Insights

  4. Si aún no está habilitado en tu instancia, haz clic en Habilitar.

  5. Seleccione las opciones de las estadísticas de consulta que necesite. Estas opciones se pueden cambiar en cualquier momento. Incluye las siguientes opciones:

    Almacenar las direcciones IP de clientes

    Te permite usar las direcciones IP de cliente desde las que provienen las consultas y agruparlas para ejecutar los datos en ellas. Las consultas provienen de más de un host. Es posible que algunos hosts se comporten de manera deficiente, o que los hosts manejen diferentes aplicaciones. Revisar los gráficos para consultas de direcciones IP de cliente podría ayudar a identificar el origen de un problema.

    Almacenar etiquetas de aplicación

    Te permite determinar qué API y rutas de controlador de vista de modelo (MVC) realizan solicitudes y agrupan esos datos para ejecutar métricas en ellos. Esta información ayuda a las consultas a identificar la fuente de un problema. En este caso, entender de qué MVC proviene el problema. Las rutas de acceso de la aplicación te ayudan a supervisar la aplicación. Esta opción requiere que hagas comentarios a las consultas con un conjunto específico de etiquetas. Puedes usar el software de código abierto de sqlcommenter en tu servidor de aplicaciones para hacerlo.

    Personalizar la longitud de las consultas

    El valor predeterminado de la consulta es 1024 BB. Puedes cambiar el límite predeterminado desde hasta un máximo de 4500 B o hasta un mínimo de 256 B. Las longitudes de consulta más altas son más útiles para las consultas analíticas, pero también requieren más memoria. Si cambias la longitud de la consulta, debes reiniciar la instancia. Las etiquetas se agregarán a las consultas que superen el límite de longitud.

  6. Haz clic en HABILITAR.

    Después de habilitar el panel de Estadísticas de consulta, verás las opciones de filtro y un gráfico de la carga de la base de datos para todas las consultas.

gcloud

Para crear una instancia nueva con las estadísticas habilitadas, ejecuta gcloud beta sql instances create con la marca --insights-config-query-insights-enabled.

Esta marca se puede usar con una o más de las siguientes marcas opcionales:

  • --insights-config-record-client-address

    Te permite usar las direcciones IP de cliente desde las que provienen las consultas y agruparlas para ejecutar los datos en ellas. Las consultas provienen de más de un host. Es posible que algunos hosts se comporten de manera deficiente, o que los hosts manejen diferentes aplicaciones. Revisar los gráficos para consultas de las direcciones IP de cliente podría ayudar a identificar la fuente de un problema.

  • --insights-config-record-application-tags

    Te permite determinar qué API y rutas de controlador de vista-modelo (MVC) realizan solicitudes y agrupan esos datos para ejecutar métricas en ellos. Esta información ayuda a las consultas a identificar la fuente de un problema. En este caso, entender de qué MVC proviene el problema. Las rutas de acceso de la aplicación te ayudan a supervisar la aplicación. Esta opción requiere que hagas comentarios a un conjunto de etiquetas específico. Puedes usar el software de código abierto de sqlcommenter en tu servidor de aplicaciones para hacerlo.

  • --insights-config-query-string-length

    El valor predeterminado de la consulta es 1024 BB. Puedes cambiar el límite predeterminado de hasta un máximo 4500 B o hasta un mínimo de 256 B. Las longitudes de consulta superiores son más útiles para las consultas estadísticas, pero también requieren más memoria. Si cambias la longitud de la consulta, debes reiniciar la instancia.

Reemplaza lo siguiente:

  • INSIGHTS_CONFIG_QUERY_STRING_LENGTH: La longitud de la cadena de consulta en bytes que se almacenará mediante la función de estadísticas de consulta. La longitud predeterminada es de 1,024 bytes. Rango permitido: de 256 a 4,500 bytes
  • API_TIER_STRING: El tipo personalizado de máquina que se usará para la instancia.
  • REGION: La región de la instancia.
  gcloud sql instances create INSTANCE_NAME
    --insights-config-query-insights-enabled
    --insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH
    --insights-config-record-application-tags
    --insights-config-record-client-address
    --tier=API_TIER_STRING
    --region=REGION
  

REST v1

Para obtener información de referencia de este comando, consulta la configuración de Instancias.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : true } }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Panel de estadísticas

En la figura 2, se muestra el panel de estadísticas de consultas, con los menús desplegables para bases de datos, usuarios y direcciones. A la derecha de los menús desplegables, hay un filtro para establecer un intervalo de tiempo. Debajo de eso, hay un gráfico para la carga de la base de datos en todas las consultas. En la parte inferior del gráfico, hay cuadros de selección para la capacidad de CPU, la CPU y la espera de la CPU, la espera de IO y la espera de bloqueo. Debajo del gráfico, hay dos pestañas: una para consultas y otra para etiquetas.
Figura 2. El panel de las estadísticas de consultas.

Las áreas del panel incluyen:

  1. Base de datos. Filtra la carga de consultas en una base de datos específica o en todas las bases de datos.
  2. Usuario. Filtra la carga de consultas de cuentas de usuario específicas.
  3. Dirección del cliente. Filtra la carga de consultas de una dirección IP específica.
  4. Intervalo de tiempo. Filtra la carga de consultas por intervalos de tiempo, como hora, día, semana o un rango personalizado.
  5. Gráfico de carga de la base de datos. Muestra el gráfico de carga de consultas, en función de los datos filtrados.
  6. Capacidad de CPU, CPU y espera CPU, espera de IO y espera de bloqueo. Filtros de cargas según las opciones que seleccione. Consulta Detección rápida: Visualiza la carga de la base de datos para las consultas a fin de obtener detalles sobre cada uno de estos filtros.
  7. Consultas y etiquetas: Filtra la carga de consultas para una consulta seleccionada o una etiqueta de consulta de SQL. Para obtener más información sobre cómo funcionan las etiquetas, consulta Detección rápida: Filtra la carga de base de datos para etiquetas. Para obtener información sobre cómo agregar etiquetas a tus consultas, consulta Agrega etiquetas a las consultas de SQL.

Guía de alto nivel para solucionar problemas de rendimiento

Query Insights soluciona los problemas de las consultas de Cloud SQL para detectar problemas de rendimiento. El panel de estadísticas de las consultas muestra la carga de consulta en función de los factores que selecciones. La carga de consultas es una medición del trabajo total para todas las consultas en la instancia en el intervalo de tiempo seleccionado.

Las estadísticas de consulta te ayudan a detectar y analizar los problemas de rendimiento de las consultas. Usa las estadísticas de consulta para solucionar los problemas de las consultas en tres fases:

  • Detección rápida: identifica la aplicación y la consulta problemática.
  • Análisis de la causa raíz: Determina por qué la consulta es lenta con el análisis del plan de consultas.
  • Identifica la fuente: Identifica la aplicación, el usuario y el host para la consulta problemática.

Detección rápida: Visualiza la carga de la base de datos para consultas.

El panel de Query Insights de nivel superior muestra el grafo Carga de la base de datos: todas las consultas principales. La carga de consultas de la base de datos es una medida del trabajo (en segundos de CPU) que ejecutó las consultas en la base de datos seleccionada a lo largo del tiempo. Cada consulta en ejecución utiliza o espera recursos de CPU, recursos de IO o recursos de bloqueo. La carga de consultas de la base de datos es la cantidad de tiempo que tomaron todas las consultas completadas en un período determinado para el tiempo real.

Los menús desplegables te permiten filtrar el gráfico de una base de datos, un usuario o una dirección cliente específicos.

Gráfico de carga de la base de datos

Muestra el grafo de carga de la base de datos con una carga para capacidad de CPU, tiempo de CPU y CPU, tiempo de IO y de bloqueo.
Figura 3. Muestra el grafo de carga de la base de datos con una carga para capacidad de CPU, tiempo de CPU y CPU, tiempo de IO y tiempo de bloqueo.

Las líneas coloreadas en el gráfico muestran la carga de la consulta dividida en cuatro categorías:

  • Capacidad de CPU: (CPU capacity) La cantidad de CPU disponibles en la instancia.
  • CPU y espera de CPU: Es la proporción del tiempo que demoran las consultas en un estado activo para el tiempo real. Las esperas de IO y bloqueo no bloquean consultas que están en estado activo. Esta métrica puede significar que la consulta usa la CPU. O la consulta puede esperar a que el programador de Linux programe el proceso del servidor que ejecuta la consulta mientras otros procesos usan la CPU.

    Nota: La carga de la CPU considera el tiempo de ejecución y el tiempo de espera del programador de Linux para programar el proceso de servidor que se ejecuta. Como resultado, la carga de la CPU puede ir más allá de la línea principal máxima.

  • Tiempo de IO: Es la proporción entre el tiempo que demoran las consultas que esperan IO en comparación con las horas reales. El tiempo de IO incluye el tiempo de escritura de IO y el tiempo de lectura de IO. Consulta la tabla de eventos de PostgreSQL. Si quieres ver un desglose de la información de tiempos de IO, puedes verlo en Cloud Monitoring. Consulta las métricas de estadísticas para obtener más información.

  • Tiempo de bloqueo: Es la proporción del tiempo que demoran las consultas que esperan los bloqueos en comparación con las horas reales. Incluye tiempos de bloqueo, tiempos de LwLock y tiempos de bloqueo de BufferPin. Si deseas ver un desglose de la información de los tiempos de bloqueo, puedes verlo en Cloud Monitoring. Consulta las métricas de estadísticas para obtener más información.

Ahora, revisa el gráfico y use las opciones de filtrado para responder estas preguntas:

  1. ¿La consulta es alta? Revisa el gráfico de carga de consultas. ¿El gráfico aumenta o se eleva a lo largo del tiempo? Si no ves una carga alta, el problema no se relaciona con tus consultas.
  2. ¿Cuánto tiempo tiene la carga alta? ¿Es solo alto? ¿O es alto desde hace mucho tiempo? Usa la selección de rango a fin de seleccionar varios períodos de tiempo para averiguar por cuánto tiempo se produjo el problema. También puedes acercar la página para ver un período en el que se observan máximos de carga de consultas. Puedes alejarte para ver hasta una semana de la línea de tiempo.
  3. ¿Qué ocasiona la carga alta? Puedes seleccionar opciones para ver la capacidad de la CPU, la espera de la CPU y la CPU, la espera de bloqueo o la espera de IO. El gráfico de cada una de estas opciones es de un color diferente para que puedas ver cuál tiene la carga más alta. La línea azul oscuro en el gráfico muestra la capacidad de CPU máxima del sistema. Te permite comparar la carga de consultas con la capacidad máxima del sistema de CPU. Esta comparación te ayuda a saber si una instancia se está quedando sin recursos de CPU.
  4. ¿Qué base de datos tiene la carga? Selecciona diferentes bases de datos en el menú desplegable de bases de datos para encontrar las bases de datos con las cargas más altas.
  5. ¿Los usuarios específicos o las direcciones IP generan cargas más altas? Selecciona usuarios y direcciones diferentes de los menús desplegables para comparar cuáles generan cargas más altas.

Detección rápida: Filtra la carga de la base de datos para todas las consultas

La tabla de CONSULTAS proporciona una descripción general de las consultas que generan la mayor carga de consulta. En la tabla, se muestran todas las consultas normalizadas para el período de tiempo y las opciones seleccionadas en el panel de Query Insights.

En la tabla CONSULTAS (QUERIES), se ordenan las consultas por el tiempo total de ejecución durante el período que seleccionaste.

Muestra el grafo de carga de la base de datos con una carga para consultas, con filtros seleccionados para la capacidad de CPU, la CPU y el tiempo de CPU, el tiempo de IO y de bloqueo.
Figura 4. Muestra el grafo de carga de la base de datos para las consultas con los filtros seleccionados para capacidad de CPU, tiempo de CPU y CPU, tiempo de IO y de bloqueo.

Para ordenar la tabla, selecciona una propiedad de Filtrar consultas o selecciona un encabezado de columna. La tabla muestra las siguientes propiedades:

  • Cadena de consulta. Cadena de consulta normalizada. Estadísticas de consulta solo muestra 1,024 caracteres en la cadena de consulta de forma predeterminada.
  • Base de datos La base de datos en la que se ejecutó la consulta.
  • Carga por tiempo total/Carga por CPU/Carga por espera de IO/Carga por espera bloqueo. Estas opciones te permiten filtrar consultas específicas a fin de encontrar la carga más grande para cada opción.
  • Tiempo de ejecución promedio (ms) Tiempo promedio en el que se ejecutará la consulta.
  • Cantidad de llamadas La cantidad de veces que la aplicación llamó a la consulta.
  • Promedio de filas recuperadas La cantidad promedio de filas recuperadas para la consulta.

En PostgreSQL 9.6 y 10, las estadísticas de consultas muestran consultas normalizadas, es decir, “?” reemplaza el valor constante literal. En el ejemplo a continuación, se quita la constante de nombre y “?” la reemplaza. Por ejemplo:

UPDATE
  "demo_customer"
SET
  "customer_id" = ?::uuid,
  "name" = ?,
  "address" = ?,
  "rating" = ?,
  "balance" = ?,
  "current_city" = ?,
  "current_location" = ?
WHERE
  "demo_customer"."id" = ?

En la versión 11 y posteriores de PostgreSQL, $1, $2 y así sucesivamente reemplaza el valor constante literal. Por ejemplo:

UPDATE
  "demo_customer"
SET
  "customer_id" = $1::uuid,
  "name" = $2,
  "address" = $3,
  "rating" = $4,
  "balance" = $5,
  "current_city" = $6,
  "current_location" = $7
WHERE
  "demo_customer"."id" = $8

El valor de la constante se ignora para que las estadísticas de consulta puedan agregar consultas similares y quitar cualquier información PII que la constante pueda mostrar.

Ahora intenta lo siguiente para determinar si una consulta es la causa raíz del problema mediante la siguiente acción: desde la pestaña CONSULTAS:

  1. Haz clic en Cargar por tiempo total para ver si una consulta tarda mucho tiempo.
  2. Si ves una consulta que parece demorar más tiempo que otras consultas, ve al gráfico de consultas específico para obtener más información sobre la solución del problema. Si las consultas parecen normales, ve a la sección Análisis de la causa raíz: Etiquetas de la aplicación.

Análisis de la causa raíz: Filtro de la carga de la base de datos para una consulta específica

Cuando encuentres una consulta que muestre una carga de consulta grande, haz clic en la consulta para abrir el panel Carga de la base de datos: Consulta específica.

En el gráfico Carga de la base de datos: consulta específica, se muestra una medida del trabajo (en segundos de CPU) que la consulta normalizada que se seleccionó se realizó en la consulta seleccionada a lo largo del tiempo. Para calcular la carga, se usa la cantidad de tiempo que demoran las consultas normalizadas que se completan en el límite de minutos en comparación con las horas reales.

En la parte superior de la tabla, se muestran los primeros 1,024 caracteres de la consulta normalizada (donde se quitan los literales por motivos de agregación y de PII).

Muestra el grafo de carga de la base de datos con una carga para una consulta específica, con los filtros seleccionados para la capacidad de CPU, el tiempo de CPU y la CPU, el tiempo de IO y de bloqueo.
Figura 5. Muestra el grafo de carga de la base de datos con una carga para una consulta específica, con los filtros seleccionados para la capacidad de CPU, el tiempo de CPU y la CPU, el tiempo de IO y de bloqueo.

Al igual que con el gráfico de consultas totales, puedes filtrar la carga de una consulta específica por Base de datos, Usuario y Dirección del cliente. La carga de consultas se divide en la capacidad de CPU, la CPU y la espera de CPU, la espera de IO y la espera de bloqueo..

Examina la latencia de consulta

Usa el gráfico Latencia para examinar la latencia en la consulta. La latencia es el tiempo que la búsqueda normalizada tarda en completarse expresado en horas reales. El panel de latencia muestra una latencia de percentil 50, 95 y 99 para encontrar comportamientos atípicos.

Muestra el grafo de latencia de consulta para una consulta específica con filtros seleccionados para la capacidad de CPU, tiempo de CPU y CPU, tiempo de IO y de bloqueo.
Figura 6. Muestra el grafo de carga de la base de datos en el percentil 50 de una consulta específica con filtros seleccionados para la capacidad de CPU, CPU y tiempo de CPU, tiempo de IO y de bloqueo.

La latencia de las búsquedas paralelas se mide en horas reales, sin importar si la carga de la base de datos es mayor para la búsqueda, puesto que se usan varios núcleos para ejecutar parte de ella.

Revisa la siguiente información para tratar de reducir el problema:

  1. ¿Qué ocasiona la carga alta? Selecciona las opciones para ver la capacidad de CPU, la espera de CPU y la CPU, la espera de bloqueo o la espera de IO.
  2. ¿Hubo aumentos repentinos en la latencia? Puedes cambiar el período para estudiar la latencia histórica de la consulta normalizada.
  3. Cuando encuentres las áreas y los horarios de la carga más alta, ve a Identifica la fuente del problema con el seguimiento para obtener más información sobre cómo desglosar más.

Detección rápida: Filtra la carga de la base de datos para las etiquetas

Estadísticas de consultas proporciona supervisión centrada en la aplicación para diagnosticar problemas de rendimiento en las aplicaciones compiladas con ORM.

Si eres responsable de toda la pila de aplicaciones, Query Insights proporciona supervisión de consultas desde una vista de aplicación. El etiquetado de consultas te ayuda a encontrar problemas en construcciones de nivel superior, como el uso de la lógica empresarial, un microservicio o alguna otra construcción. Puedes etiquetar las consultas según la lógica empresarial, por ejemplo, con las etiquetas de pago, inventario, estadísticas comerciales o envío. A continuación, puedes encontrar la carga de consulta que crean las diversas lógicas empresariales. Por ejemplo, puedes encontrar eventos inesperados, como máximos para una etiqueta de estadísticas de negocios a la 1 p.m. O es posible que veas un crecimiento anormal de un servicio de pagos con tendencias durante la semana anterior.

Las etiquetas de carga de consultas proporcionan un desglose de la carga de consultas de la etiqueta seleccionada a lo largo del tiempo.

Para calcular la carga de la base de datos para la etiqueta, estadísticas de consultas usa la cantidad de tiempo que toma cada consulta que usa la etiqueta que seleccionaste. Estadísticas de consultas calcula el tiempo de finalización en el límite de minutos mediante el tiempo real.

En el panel de estadísticas de consultas, selecciona ETIQUETAS (TAGS) para ver la tabla de etiquetas. La tabla de ETIQUETAS ordena las etiquetas por la carga total según el tiempo total.

En la figura 7, se muestra el panel de estadísticas de las consultas, con la carga de etiquetas.
         Debajo del gráfico, hay una lista de etiquetas.
Figura 7. La carga de la base de datos para una etiqueta seleccionada.

Puedes ordenar la tabla si seleccionas una propiedad en Filtrar consultas o si haces clic en el encabezado de una columna. La tabla muestra las siguientes propiedades:

  • Action, Controller, Framework, Route, Application y DB Driver. Cada propiedad que agregaste a tus consultas se muestra como una columna. Se debe agregar al menos una de estas propiedades si deseas filtrar por etiquetas.
  • Carga por tiempo total/Carga por CPU/Carga por espera de IO/Carga por espera bloqueo. Estas opciones te permiten filtrar consultas específicas a fin de encontrar la carga más grande para cada opción.
  • Tiempo de ejecución promedio (ms) Tiempo promedio en el que se ejecutará la consulta.
  • Cantidad de llamadas La cantidad de veces que la aplicación llamó a la consulta.
  • Promedio de filas recuperadas La cantidad promedio de filas recuperadas para la consulta.
  • Base de datos La base de datos en la que se ejecutó la consulta.

Ahora intenta lo siguiente para determinar si una consulta es la causa raíz del problema mediante la siguiente acción: desde la pestaña ETIQUETAS:

  1. Haz clic en Cargar por tiempo total para ver si una consulta tarda mucho tiempo.
  2. Si ves una etiqueta que parece que tarda más tiempo que otras etiquetas, ve al gráfico de etiquetas específico para obtener más información sobre la solución de problemas.

Análisis de la causa raíz: Visualización de los detalles de una carga de consulta etiquetada

De manera similar a una carga de consulta normalizada, puedes hacer clic en cualquier entrada de la tabla de etiquetas para ver los detalles de una carga de consulta etiquetada. Por ejemplo, si todas las consultas de un pago de microservicios se etiquetan como payment, puedes ver la cantidad de carga de consultas que es tendencia mediante la etiqueta payment.

La Figura 8 muestra los gráficos de latencia y carga de la base de datos en la página para una etiqueta específica.
Figura 8. Gráficos de latencia y carga de la base de datos para una etiqueta específica.

Al igual que con el gráfico de consultas totales, puedes filtrar la carga de una consulta específica por Base de datos, Usuario y Dirección del cliente. La carga de consultas se divide en la capacidad de CPU, la CPU y la espera de CPU, la espera de IO y la espera de bloqueo..

Revisa la siguiente información para tratar de reducir el problema:

  1. ¿Qué ocasiona la carga alta? Selecciona las opciones para ver la capacidad de CPU, la espera de CPU y la CPU, la espera de bloqueo o la espera de IO.
  2. ¿Cuánto tiempo tiene la carga alta? ¿Es solo alto? ¿O es alto desde hace mucho tiempo? Cambia los intervalos de tiempo para buscar la fecha y la hora en que la carga comenzó a tener un rendimiento deficiente.
  3. Cuando encuentres las áreas y los horarios de la carga más alta, ve a Identifica la fuente del problema con el seguimiento para obtener más información sobre cómo desglosar más.

Examina operaciones en un plan de consulta de muestra

Un plan de consulta toma una muestra de tu consulta y la divide en operaciones individuales. Explica y analiza cada operación de la consulta. En el gráfico de muestras del plan de consultas, se muestran todos los planes de consulta que se ejecutan en momentos específicos y la cantidad de tiempo que tardó cada plan en ejecutarse.

En la Figura 9, se muestra un grafo para los planes de consulta de muestra, con el tiempo en el que se ejecutaron en la parte inferior del grafo (eje x), y la cantidad de segundos que ejecutó en el extremo derecho (eje y).
Figura 9. Gráfico que muestra planes de consulta de muestra, cuándo se ejecutaron y la cantidad de segundos en los que se ejecutaron.

Para ver los detalles del plan de consultas de muestra, haz clic en los puntos del gráfico Planes de consultas de muestra. Hay una vista de los planes de consultas de muestra para la mayoría, pero no todas, las consultas. Los detalles expandidos muestran un modelo de todas las operaciones del plan de consultas. Cada operación muestra la latencia, las filas que se muestran y el costo de esa operación. Cuando seleccionas una operación, puedes ver más detalles, como bloques de hits compartidos, el tipo de esquema, los bucles reales, las filas de planes y mucho más.

Figura 10. El plan de consulta muestra la latencia y el costo de cada operación que se ejecuta para la consulta. Comienza con una agregación, que muestra 48 filas, con una latencia de 31.06 ms y un costo de 296.34. La siguiente operación es un bucle anidado, que se divide en otro bucle anidado y una materialización.
         El bucle anidado se divide en otro bucle anidado y un análisis de índice. La materialización conduce a un análisis de secuencia.
Figura 10. El plan de consulta muestra la latencia y el costo de cada operación que se ejecuta para la consulta.

Revisa la siguiente información para tratar de reducir el problema:

  1. ¿Cuál es el consumo de recursos?
  2. ¿Cómo se relaciona con otras consultas?
  3. ¿El consumo cambia con el tiempo?

Identifica el origen del problema mediante seguimiento

La última pregunta que necesitamos responder en nuestro recorrido de solución de problemas es: ¿Cuál es el origen del problema? Más específicamente, ¿qué modelo, vista, controlador, ruta, host y usuario están causando el problema?

Query Insights proporciona una vista de seguimiento de extremo a extremo en contexto a fin de comprender lo que sucede en la capa de base de datos para una solicitud específica. Usa un seguimiento de aplicaciones de extremo a extremo en contexto para encontrar el origen de la consulta problemática por modelo, vista, controladores y ruta. Si habilitas OpenCensus o OpenTelemetry, la información de intervalo de opencensus se envía a la base de datos junto con la información de la etiqueta en los comentarios de SQL. Cualquier seguimiento de la aplicación a Cloud Logging está vinculado a los registros del plan de consulta de la base de datos para identificar el origen del problema. Puedes hacer clic en la pestaña De extremo a extremo como se muestra a continuación para ver el seguimiento en contexto.

Figura 11. Selecciona una etiqueta en la pestaña De extremo a extremo para ver información específica sobre la etiqueta. El resumen muestra las RPC y la duración total en ms para cada operación de esa etiqueta.
Figura 11. Selecciona una etiqueta en la pestaña De extremo a extremo para ver información específica sobre la etiqueta.

Para determinar el cliente y el usuario que causa el problema, usa las direcciones de cliente y las tablas de usuarios principales a fin de encontrar las cargas más altas. Puedes agregar un usuario o una dirección IP al filtro para analizar en más detalle un usuario o una dirección de cliente específicos.

Figura 12. La imagen muestra que, en el caso de las direcciones principales de los clientes, la carga fue del 100%, el tiempo de ejecución promedio fue de 19,568 segundos y las veces que se llamó fue 1,226. Para los usuarios principales, la postgres de usuario tuvo el 100% de la carga, tuvo un tiempo de ejecución promedio de 19,568 ms y se lo llamó 1,226 veces.
Figura 12. Los detalles de las direcciones de clientes principales y los usuarios principales incluyen el porcentaje de carga de la consulta, el tiempo promedio de ejecución en ms y la cantidad de veces que se llamó.

En el caso de las consultas, puedes usar Cloud Trace para ver el seguimiento de extremo a extremo de cada paso en el plan de consultas. En el panel de estadísticas, haz clic en el vínculo Ver en seguimiento para abrir la herramienta de Cloud Trace.

Figura 13. El gráfico de seguimiento muestra todos los seguimientos que se ejecutaron en el período seleccionado, en este caso, una hora. La página también tiene una tabla que muestra la latencia, el método HTTP, la URL y la hora en la que se ejecutó el seguimiento.
Figura 13. El gráfico de seguimiento muestra todos los seguimientos que se ejecutaron durante el período seleccionado.

Para obtener más información sobre cómo usar las herramientas en Cloud Trace, consulta Cómo buscar y ver seguimientos.

Agrega etiquetas a las consultas de SQL

Etiquetar las consultas de SQL simplifica la solución de problemas de aplicaciones. Si usas ORC o sqlcommenter juntos, las etiquetas se crean de manera automática sin necesidad de agregar un código personalizado a tu aplicación. Si no usas ORC, debes agregar etiquetas sqlcommenter a tus consultas de SQL de forma manual.

Usa sqlcommenter para agregar etiquetas manualmente

En tu consulta, debes aumentar cada instrucción de SQL con un comentario que contenga un par clave-valor serializado. Usa al menos una de las siguientes claves:

  • Action=''
  • Controller=''
  • Framework=''
  • Route=''
  • Application=''
  • DB Driver=''

Query Insights descarta todas las demás claves. Consulta la documentación de sqlcommenter para conocer el formato de comentario SQL correcto.

Usa sqlcommenter con ORM

Cuando se usa la asignación relacional de objetos (ORM) en lugar de escribir consultas de SQL directamente, es posible que no encuentres el código de la aplicación que causa problemas de rendimiento. También puedes tener problemas para analizar cómo el código de tu aplicación afecta el rendimiento de las consultas. Para abordar ese punto problemático, Query Insights proporciona una biblioteca de código abierto llamada sqlcommenter, una biblioteca de instrumentación ORC. Esta biblioteca es útil para los desarrolladores que usan ORM y administradores a fin de detectar qué código de aplicación está ocasionando problemas de rendimiento. Es importante mencionar que el proceso en conjunto no requiere cambios en el código de la aplicación.

Para abordar los puntos problemáticos, Query Insights proporciona una biblioteca de instrumentación de ORM llamada sqlcommenter. Puedes instalar sqlcommenter en el servidor de aplicaciones. La biblioteca de instrumentación permite que la información de la aplicación relacionada con tu framework de modelo, vista y controlador (MVC) se propague a la base de datos junto con las consultas como un comentario de SQL. La base de datos recoge estas etiquetas y comienza a registrar y agregar estadísticas por etiquetas, que son ortogonales con estadísticas agregadas por consultas normalizadas. Query Insights muestra las etiquetas para que sepas qué aplicación está causando la carga de la consulta. Esta información te ayuda a encontrar el código de la aplicación que causa problemas de rendimiento. Es importante mencionar que el proceso en conjunto no requiere cambios en el código de la aplicación.

Cuando examinas los resultados en los registros de la base de datos SQL, se ven de la siguiente manera:

SELECT * from USERS /*action='run+this',
controller='foo%3',
traceparent='00-01',
tracestate='rojo%2'*/

Las etiquetas compatibles incluyen el nombre del controlador, la ruta, el framework y la acción.

El conjunto de ORM en sqlcommenter es compatible con varios lenguajes de programación:

Python
  • Django
  • psycopg2
  • Sqlalchemy
  • Flask
Java
  • Hibernate
  • Primavera
Ruby
  • Rails
Node.js
  • Knex.js
  • Sequelize.js
  • Express.js

Para obtener más información, consulta la documentación de sqlcommenter en GitHub.

Instala sqlcommenter con tu framework ORM

Para obtener más información, así como instrucciones sobre la instalación, consulta la documentación de sqlcommenter en GitHub.

Inhabilita estadísticas

Para inhabilitar Insights en una instancia, sigue estos pasos:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.
    Ir a la página Instancias de Cloud SQL
  2. Haz clic en el nombre de una instancia para navegar a la página Descripción general.

  3. En el campo Configuración, haz clic en Editar configuración.
  4. En Opciones de configuración, expande Query Insights.
  5. Desmarca la casilla de verificación "Habilitar estadísticas de consultas".
  6. Haz clic en Guardar.

gcloud

Ejecuta gcloud beta sql instances patch con la marca --no-insights-config-query-insights-enabled.

  gcloud beta sql instances patch --no-insights-config-query-insights-enabled
  

REST

Antes de usar cualquiera de los datos de solicitud siguientes, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • instance-id: El ID de la instancia

Método HTTP y URL:

PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Cuerpo JSON de la solicitud:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Qué sigue