Investiga el uso alto de CPU

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

Identificar si una tarea del sistema o del usuario está causando un uso alto de CPU

Cloud Console proporciona varias herramientas de supervisión para Cloud Spanner, lo que te permite ver el estado de las métricas más esenciales de la instancia. Uno de estos gráficos es el Uso de CPU: prioridad alta. En el gráfico, se muestra el uso de CPU de las tareas de alta prioridad con el uso máximo de CPU recomendado para las instancias de una o varias regiones. Existen dos tipos de tareas: Tareas del usuario, como lecturas y escrituras, y tareas del sistema, como compactación y reabastecimiento de un índice.

Para distinguir entre los tipos de tareas de este gráfico, haz lo siguiente:

  1. Haga clic en el ícono de Más opciones de gráfico en el gráfico.

  2. Selecciona Ver en el Explorador de métricas.

  3. En el Explorador de métricas, agrega is_system a la opción Agrupar por. En el gráfico, ahora se muestra el uso de CPU desglosado por tarea del sistema y tarea del usuario.

En la Figura 1, se muestra un ejemplo del uso de CPU por gráfico de prioridad alta.

Ejemplo de un uso de CPU por gráfico de prioridad alta

Figura 1. Gráfico del uso de CPU por prioridad alta en el panel de Monitoring en Cloud Console.

Ahora, imagina que recibes una alerta de Cloud Monitoring que indica que el uso de CPU aumentó de manera significativa. Para abrir el panel Monitoring de tu instancia en Cloud Console y examinar el gráfico Uso de CPU: prioridad alta, ábrelo en el Explorador de métricas. Como se muestra en la Figura 1, puedes ver el aumento en el uso de CPU de alta prioridad y, si observas el valor de is_system, determinas que el aumento se debe al usuario tareas. El siguiente paso es averiguar qué operación del usuario provoca este aumento de uso de CPU.

Identificar qué operación del usuario provoca el aumento de uso de CPU

En el gráfico Uso de CPU: prioridad alta que se muestra en la Figura 1, se mostró que las tareas de alta prioridad de los usuarios causan un mayor uso de la CPU.

A continuación, examinaremos la métrica Uso de CPU por tipo de operación. Para ello, crearemos un gráfico con el explorador de métricas de Cloud Monitoring. Este gráfico mostrará el uso de CPU desglosado por operaciones de alta prioridad 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. Cloud Spanner agrupa estas solicitudes en tipos o categorías de operaciones, y podemos 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 la API que se incluyen en cada tipo de operación.

Operación Métodos de la API Descripción
read_readonly Read
StreamingRead
Se incluyen las lecturas que recuperan filas de la base de datos mediante búsquedas y análisis de claves.
read_readwrite Read
StreamingRead
Incluye las lecturas de las 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 ejecución de la instrucción de SQL de selección.
runsql_select_readwrite ExecuteSql
ExecuteStreamingSql
Incluye la instrucción de ejecutar Seleccionar dentro de transacciones de lectura y escritura.
runsql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Incluye la declaración de ejecución de selección realizada con un conjunto de tokens de partición.
runsql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la ejecución de la instrucción de DML SQL.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la ejecución de la instrucción de SQL de DML particionado.
beginorcommit Comenzar transacción
Confirmación
Reversión
Incluye transacciones de inicio, confirmación y reversión.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Incluye PartitionQuery, PartitionRead, Create Database, Crear instancia, operaciones relacionadas con la sesión, operaciones internas de entrega urgentes, etcétera.

Crea un gráfico para el uso de CPU por tipo de operaciones 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. El gráfico mostrará el uso de CPU de las tareas del usuario agrupadas por tipo de operación o categoría.

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

Ejemplo de un gráfico de uso de CPU por tipo de operación

Figura 2. Gráfico del Uso de CPU por tipo de operación en el Explorador de métricas

Cada tipo de operación, o categoría, se traza en un gráfico de líneas. El filtro de categorías debajo del gráfico identifica cada gráfico. Para ocultar y mostrar cada gráfico, selecciona o anula la selección de su filtro de categoría respectivo.

Por lo tanto, si bien la métrica Uso de CPU por prioridad en la sección anterior ayudó a determinar si una tarea del sistema o de un usuario generó un aumento en el uso de recursos de CPU, con la opción Uso de CPU por una métrica de tipo de operación podemos profundizar y averiguar el tipo de operación iniciada por el usuario detrás de este aumento en el uso de CPU.

Identificar qué solicitud de usuario contribuye al aumento del uso de CPU

Para determinar qué solicitud de usuario específica es responsable del aumento repentino en el uso de CPU en el gráfico del tipo de operación runsql_select_readonly que vimos en la Figura 2, usaremos las tablas de estadísticas de introspección integradas para obtener más estadísticas.

Usa la siguiente tabla como guía para determinar qué tabla de estadísticas consultar en función del tipo de operación que causa un alto uso de la 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
runsql_select_withpartitiontoken No No
runsql_select_readwrite No
runsql_dml_readwrite No No
executesql_dml_partitioned No No
beginorcommit No No

Por ejemplo, si el problema es read_withpartitiontoken, soluciona el problema con estadísticas de lectura.

En nuestra situación, la operación executsql_select_readonly parece ser la razón del aumento de uso de CPU que estamos observando. Según la tabla anterior, debemos observar las estadísticas de consulta para averiguar qué consultas son costosas, ejecutar con frecuencia o analizar muchos datos.

Para encontrar las consultas con el uso de CPU más alto en la hora anterior, ejecutamos 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;

En el resultado, se mostrarán las consultas ordenadas por uso de CPU. Una vez que identificamos la consulta con el uso de CPU más alto, podemos 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 para asegurarte 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 Cloud 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 lograste encontrar una consulta que requiera mucha CPU, agrega capacidad de procesamiento a la instancia. Agregar capacidad de procesamiento proporciona más recursos de CPU y permite que Cloud Spanner maneje una carga de trabajo más grande. Para obtener más información, consulta Aumenta la capacidad de procesamiento.

¿Qué sigue?