Investiga el alto uso de CPU

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 uso elevado de CPU en tu base de datos.

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

La consola de Google Cloud proporciona varias herramientas de supervisión para Spanner, lo que te permite ver el estado de las métricas más esenciales de tu 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 tarea y tipo de operación. Existen dos tipos de tareas: las tareas del usuario, como las de lectura y escritura, y las tareas del sistema, que cubren tareas automatizadas en segundo plano, 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 uso de CPU: gráfico de totales

Figura 1. Gráfico Uso de CPU - total en el panel de Monitoring de la consola de Google Cloud.

Ahora, imagina que recibes una alerta de Cloud Monitoring que indica que el uso de CPU aumentó de forma significativa. Abre el panel de Monitoring de tu instancia en la consola de Google Cloud y examina el gráfico Uso de CPU: Total en la consola de Cloud. Como se muestra en la Figura 1, puedes ver el aumento del uso de CPU a partir de tareas de usuario de prioridad alta. El siguiente paso es averiguar qué operación de usuario de prioridad alta está causando el aumento de este uso de la CPU.

Puedes visualizar esta y otras métricas en una serie temporal mediante los paneles de Estadísticas de consultas. Estos paneles compilados previamente te ayudan a ver los aumentos repentinos en el uso de CPU y a identificar consultas ineficientes.

Identifica qué operación del usuario causa el aumento del uso de CPU

En el gráfico Uso de CPU - Total de la Figura 1, se muestra que las tareas del usuario de prioridad alta son la causa del mayor uso de CPU.

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

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

Una operación iniciada por el usuario es aquella que se inicia a través de una solicitud a la API. Spanner agrupa estas solicitudes en tipos o categorías de operación, 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 las lecturas que recuperan filas de la base de datos mediante búsquedas y análisis de claves.
read_readwrite Read
StreamingRead
Incluye las operaciones de lectura dentro de las transacciones de lectura y escritura.
read_withpartitiontoken Read
StreamingRead
Incluye las operaciones de lectura realizadas mediante un conjunto de tokens de partición.
executesql_select_readonly EjecutarSql
EjecutarStreamingSql
Incluye la ejecución de instrucciones Select SQL y consultas de flujos de cambios.
executesql_select_readwrite EjecutarSql
EjecutarStreamingSql
Incluye la ejecución de la sentencia Select en las transacciones de lectura y escritura.
executesql_select_withpartitiontoken EjecutarSql
EjecutarStreamingSql
Incluye ejecutar la sentencia Select realizada con un conjunto de tokens de partición.
executesql_dml_readwrite EjecutarSql
EjecutarStreamingSql
EjecutarBatchDml
Incluye ejecutar la declaración DML en SQL.
executesql_dml_partitioned EjecutarSql
EjecutarStreamingSql
EjecutarBatchDml
Incluye ejecutar la instrucción de SQL DML particionada.
beginorcommit ComenzarTransacción
Confirmación
Reversión
Incluye las transacciones de inicio, confirmación y reversión.
misc Partición
ParticiónRead
GetSession
CreateSession
Incluye Partición de consulta, Partición de lectura, Crear base de datos, Crear instancia, Operaciones relacionadas con sesiones, operaciones internas de entrega de tiempo crítico, etcétera.

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

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

Figura 2. Gráfico de uso de CPU por tipo de operación en la consola de Google Cloud.

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 que se enumeran debajo del gráfico identifican cada gráfico. Puedes ocultar y mostrar cada gráfico seleccionando o anulando la selección de su respectivo filtro de categorías.

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

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

  1. En la consola de Google Cloud, 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.

Si bien la métrica Uso 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 recursos de CPU, con la métrica Uso de CPU por tipo de operación puedes profundizar y descubrir el tipo de operación iniciada por el usuario detrás de este aumento en el uso de CPU.

Identifica qué solicitud del usuario contribuye a un 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 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 según el tipo de operación que causa un uso elevado de CPU.

Tipo de operación Consulta Leer Transacción
read_readonly No. No.
read_readwrite No.
read_withpartitiontoken No. No.
executesql_select_readonly No. No.
executesql_select_withpartitiontoken No. No.
executesql_select_readwrite No.
executesql_dml_readwrite 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 esta situación, la operación executesql_select_readonly parece ser el motivo del aumento en el uso de CPU que observas. En función de la tabla anterior, debes observar las estadísticas de consulta a continuación para averiguar qué consultas son costosas, se ejecutan con frecuencia o 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 cualquier ineficiencia posible que pueda contribuir al uso de CPU elevado.

  • Revisa tu consulta a fin de asegurarte de que siga 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 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 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?