Investiga el alto uso de CPU

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se describe cómo usar las métricas y los gráficos de uso de CPU, junto con otras herramientas de introspección, para investigar el alto uso de CPU en tu base de datos.

Identifica si una tarea del sistema o del usuario provoca un alto uso de CPU

Google Cloud Console proporciona varias herramientas de supervisión para Spanner, lo que te permite ver el estado de las métricas más esenciales de la instancia. Uno de estos es un gráfico llamado Uso de CPU: total. En este gráfico, se muestra el uso de CPU total, como un porcentaje de los recursos de CPU de la instancia, desglosado por prioridad de la tarea y tipo de operación. Hay dos tipos de tareas: tareas del usuario, como las de lectura y escritura, y tareas del sistema, que abarcan tareas en segundo plano automatizadas, como la compactación y el reabastecimiento de índices.

En la Figura 1, se muestra un ejemplo del gráfico Uso de CPU: total.

Ejemplo de un uso de CPU: gráfico total

Figura 1. Gráfico Uso de CPU: total en el panel de Monitoring en Google Cloud Console

Ahora, imagina que recibes una alerta de Cloud Monitoring que indica que el uso de CPU aumentó significativamente. Abre el panel Monitoring de tu instancia en Google Cloud Console y examina el gráfico Uso de CPU: total en Cloud Console. Como se muestra en la Figura 1, puedes ver el aumento en el uso de CPU de las tareas de usuario de prioridad alta. El siguiente paso es averiguar qué operación de prioridad alta causa el aumento de uso de CPU.

Puedes visualizar esta y otras métricas de una serie temporal mediante los paneles de estadísticas de consultas. Estos paneles preconfigurados te ayudan a ver los picos en el uso de CPU y a identificar consultas ineficientes.

Identifica qué operación de usuario está causando el pico de uso de CPU

En el gráfico Uso de CPU: total de la Figura 1, se muestra que las tareas del usuario con prioridad alta causan un mayor uso de CPU.

A continuación, examinará el gráfico Uso de CPU por tipo de operación en Cloud Console. En este gráfico, se muestra el uso de CPU desglosado por operaciones de prioridad alta, media y baja iniciadas por el usuario.

¿Qué es una operación iniciada por el usuario?

Una operación iniciada por el usuario es una operación que se inicia a través de una solicitud a la API. Spanner agrupa estas solicitudes en tipos o categorías de operaciones y puedes mostrar cada tipo de operación como una línea en el gráfico Uso de CPU por tipo de operación. En la siguiente tabla, se describen los métodos de API que se incluyen en cada tipo de operación.

Operación Métodos de la API Descripción
read_readonly Read
StreamingRead
Incluye lecturas que recuperan filas de la base de datos mediante búsquedas y análisis de claves.
read_readwrite Read
StreamingRead
Incluye lecturas dentro de transacciones de lectura y escritura.
read_withpartitiontoken Read
StreamingRead
Incluye operaciones de lectura realizadas con un conjunto de tokens de partición.
runsql_select_readonly. ExecuteSql
ExecuteStreamingSql
Incluye la instrucción de ejecución de SQL de ejecución y cambia las consultas de transmisión.
runsql_select_readwrite ExecuteSql
ExecuteStreamingSql
Incluye la instrucción de ejecución de ejecución dentro de transacciones de lectura y escritura.
Ejecutesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Incluye la instrucción de ejecución de ejecución que se realizó con un conjunto de tokens de partición.
runsql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la instrucción de ejecución de SQL de DML.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la instrucción de SQL DML particionado.
beginorcommit Revertir
Confirmación
Reversión
Incluye transacciones de inicio, confirmación y reversión.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Incluye PartitionQuery, PartitionRead, Create Database, Create Instance, operaciones relacionadas con la sesión, operaciones internas de entrega críticas, etcétera

A continuación, se muestra un gráfico de ejemplo de la métrica Utilización de CPU por tipo de operación.

Ejemplo del uso de CPU por tipo de operación

Figura 2. Gráfico Uso de CPU por tipo de operación en Google Cloud Console.

Puedes limitar la visualización a una prioridad específica mediante el menú Prioridad en la parte superior del gráfico. Traza cada tipo de operación o categoría en un gráfico de líneas. Las categorías enumeradas debajo del gráfico identifican cada grafo. Puedes ocultar y mostrar cada grafo si seleccionas o anulas la selección de su filtro de categoría respectivo.

Como alternativa, también puede crear este gráfico en el Explorador de métricas como se describe a continuación:

Crea un gráfico para el uso de CPU por tipo de operación en el Explorador de métricas

  1. En Google Cloud Console, selecciona Monitoring o usa el siguiente botón:

    Ir a Monitoring

  2. Selecciona Explorador de métricas en el panel de navegación.
  3. En el campo Buscar tipo de recurso y métrica, ingresa el valor spanner.googleapis.com/instance/cpu/utilization_by_operation_type y, luego, selecciona la fila que aparece debajo del cuadro.
  4. En el campo Filtro, ingresa el valor instance_id, luego ingresa el ID de la instancia que deseas examinar y haz clic en Aplicar.
  5. En el campo Agrupar por, selecciona category en la lista desplegable. En el gráfico, se mostrará el uso de CPU de las tareas del usuario agrupadas por tipo de operación o categoría.

Si bien la métrica Utilización de CPU por prioridad de la sección anterior ayudó a determinar si una tarea del usuario o del sistema causó un aumento en el uso de los recursos de CPU, con la métrica Utilización de CPU por tipo de operación puedes analizar en profundidad y descubrir el tipo de operación iniciada por el usuario detrás de este aumento en el uso de CPU.

Identifica la solicitud de usuario que contribuye al aumento del uso de CPU

Para determinar qué solicitud de usuario específica es responsable del aumento en el uso de CPU en el grafo de tipo de operación executesql_select_readonly que se muestra en la Figura 2, usarás las tablas de estadísticas de introspección integradas para obtener más información.

Usa la siguiente tabla como guía para determinar qué tabla de estadísticas consultar en función del tipo de operación que genera un mayor uso de CPU.

Tipo de operación Consulta Leer Transacción
read_readonly No No
read_readwrite No
read_withpartitiontoken No No
runsql_select_readonly. No No
Ejecutesql_select_withpartitiontoken No No
runsql_select_readwrite No
runsql_dml_readwrite No
executesql_dml_partitioned No No
beginorcommit No No

Por ejemplo, si el problema es read_withpartitiontoken, soluciona los problemas mediante las estadísticas de lectura.

En esta situación, la operación executsql_select_readonly parece ser el motivo del aumento del uso de CPU que estás observando. En función de la tabla anterior, debes observar las estadísticas de consulta junto a las consultas que son costosas, que se ejecutan con frecuencia o que analizan muchos datos.

Para averiguar las consultas con el uso de CPU más alto en la hora anterior, puedes ejecutar la siguiente consulta en la tabla de estadísticas query_stats_top_hour.

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

El resultado mostrará las consultas ordenadas por uso de CPU. Una vez que identifiques la consulta con el uso de CPU más alto, puedes probar las siguientes opciones para ajustarla.

  • Revisa el plan de ejecución de consultas para identificar las posibles ineficiencias que podrían contribuir al alto uso de CPU.

  • Revisa tu consulta y asegúrate de que cumpla con las prácticas recomendadas de SQL para Cloud Spanner.

  • Revisa el diseño del esquema de la base de datos y actualízalo para permitir consultas más eficientes.

  • Establece un modelo de referencia para la cantidad de veces que Spanner ejecuta una consulta durante un intervalo. Con este modelo de referencia, podrás detectar e investigar la causa de cualquier desviación inesperada del comportamiento normal.

Si no pudiste encontrar una consulta con uso intensivo de CPU, agrega la capacidad de procesamiento a la instancia. Agregar capacidad de procesamiento proporciona más recursos de CPU y permite que Spanner maneje una carga de trabajo más grande. Para obtener más información, consulta Aumenta la capacidad de procesamiento.

¿Qué sigue?