Examina el uso de CPU elevado

En esta página, se describe cómo usar las métricas y los gráficos de uso de la 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 usuario o del sistema está provocando un uso elevado de la 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 para tu instancia. Uno de estos gráficos es Uso de CPU: prioridad alta. El gráfico muestra el uso de CPU de las tareas de prioridad alta contra el uso máximo de CPU recomendado para las instancias de una sola región y multirregionales. Existen dos tipos de tareas. tareas del usuario, como operaciones de lectura y escritura, y tareas del sistema, como realizar copias de seguridad y compactación

Para distinguir entre los tipos de tareas en este gráfico, sigue estos pasos:

  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. Ahora, el gráfico muestra el uso de CPU desglosado por tarea del usuario y tarea del usuario.

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

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

Figura 1. Gráfico de uso de CPU por prioridad alta en el panel de supervisión de Cloud Console.

Ahora, imagina que recibes una alerta de Cloud Monitoring que aumentó el uso de la CPU de manera significativa. Abre el panel de Monitoring de tu instancia en Cloud Console y examina el gráfico Uso de CPU: prioridad alta al abrirlo 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 es causado por el usuario tareas. El siguiente paso es averiguar qué operación del usuario genera el aumento del uso de CPU.

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

El gráfico Uso de CPU: prioridad alta en la Figura 1 nos mostró que las tareas del usuario de alta prioridad son la causa del uso de CPU más alto.

A continuación, examinaremos la métrica Uso de CPU por tipo de operación mediante la creación de un gráfico con el explorador de métricas de Cloud Monitoring. En este gráfico, se mostrará el uso de CPU desglosado por operaciones de inicio iniciada 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 de operación o categorías, 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 API que se incluyen en cada tipo de operación.

Operación Métodos de la API Descripción
read_readonly Leer
StreamingRead
Se incluyen las lecturas que recuperan filas de la base de datos mediante búsquedas y análisis de claves.
Lectura y escritura Leer
StreamingRead
Incluye lecturas dentro de transacciones de lectura y escritura.
read_withpartitiontoken Leer
StreamingRead
Incluye las operaciones de lectura realizadas con un conjunto de tokens de partición.
runsql_select_readonly RunSql
ExecuteStreamingSql
Incluye la ejecución de la instrucción Select SQL.
runsql_select_readwrite RunSql
ExecuteStreamingSql
Incluye la ejecución de la instrucción Select dentro de las transacciones de lectura y escritura.
runsql_select_withpartitiontoken RunSql
ExecuteStreamingSql
Incluye la ejecución de la instrucción Select que se realizó con un conjunto de tokens de partición.
runsql_dml_readwrite RunSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la ejecución de la instrucción DML de ejecución de SQL.
runsql_dml_partitioned RunSql
ExecuteStreamingSql
ExecuteBatchDml
Incluye la ejecución de la instrucción de SQL particionada en ejecución.
inicio de confirmación Comienzo de
transacción
reversión
Incluye las transacciones de inicio, confirmación y reversión.
variedad PartitionQuery
PartitionRead
GetSession
CreateSession
Incluye PartitionQuery, PartitionRead, Create Database, Create Instance, sessions operations session, internal times serving operations, etcétera.

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

  1. En 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 (Group By), selecciona category de 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 uso de CPU por tipo de operación

Figura 2. Gráfico de 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ía debajo del gráfico identifica cada gráfico. Para ocultar y mostrar cada grafo, selecciona o anula la selección de su filtro de categoría respectivo.

Entonces, mientras que elUso de CPU por prioridad de la sección anterior ayudó a determinar si un usuario o una tarea del sistema causó un aumento en el uso de recursos de la CPU, conUso de CPU por tipo de operación métrica que podemos analizar con más profundidad y descubrir el tipo de operación iniciada por el usuario detrás de este incremento en el uso de la CPU.

Identificar qué solicitud del usuario contribuye a aumentar el uso de CPU

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

Usa la tabla siguiente como guía para determinar qué tabla de estadísticas consultar según el tipo de operación que genera el alto uso de CPU.

Tipo de operación Consulta Leer Transacción
read_readonly No No
Lectura y escritura No
read_withpartitiontoken No No
runsql_select_readonly No No
runsql_select_withpartitiontoken No No
runsql_select_readwrite No
runsql_dml_readwrite No No
runsql_dml_partitioned No No
inicio de confirmación No No

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

En esta situación, la operación executsql_select_readonly parece ser el motivo del aumento de uso de CPU que observamos. En función de la tabla anterior, debemos analizar las estadísticas de consulta junto para averiguar qué consultas son costosas, ejecutarlas con frecuencia o analizar muchos datos.

Para buscar 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;

El resultado mostrará las consultas ordenadas por uso de CPU. Una vez que identifiquemos la consulta con el mayor uso de CPU, podemos probar las siguientes opciones para ajustarla.

  • Revisa el plan de ejecución de consultas para identificar cualquier ineficiencia posible que pueda contribuir a un uso elevado 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 actualiza el esquema para permitir que se realicen 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 logras encontrar una consulta con uso intensivo de CPU, agrega nodos a la instancia. Agregar nodos proporciona más recursos de CPU y permite que Cloud Spanner maneje una carga de trabajo mayor. Para obtener más información, consulta Agrega nodos.

¿Qué sigue?