En esta página, se describe cómo usar las métricas y los gráficos del uso de CPU, junto con y otras herramientas de introspección para investigar el alto uso de la CPU en tu base de datos.
Identificar si una tarea del sistema o del usuario está provocando un alto uso de CPU
La consola de Google Cloud ofrece varias de supervisión para Spanner, lo que te permite ver el estado de la métricas esenciales para tu instancia. Uno de ellos es un gráfico llamado Uso de CPU: Total. En este gráfico, se muestra el uso de CPU total como un porcentaje de la CPU de la instancia de recursos, desglosados por prioridad de las tareas 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 abarcan 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.
Figura 1. Gráfico CPU utilization - 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 la CPU aumentó de manera significativa. Abres el panel de Monitoring de tu instancia en la consola de Google Cloud y examina el Uso de CPU: Total gráfico en la consola de Cloud. Como se muestra en la figura 1, puede ver el aumento del uso de CPU a partir de las tareas del usuario de alta prioridad. El siguiente paso es averiguar qué operación de usuario de alta prioridad está causando este aumento en el uso de la CPU.
Puedes visualizar esta y otras métricas en una serie temporal con las Estadísticas de consultas. paneles. Estos paneles precompilados 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 repentino del uso de la CPU
El gráfico CPU utilization - Total en la Figura 1 muestra que las tareas de usuario de alta prioridad son la causa de un mayor uso de la 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 la CPU desglosado por operaciones iniciadas por el usuario de alta, media y baja prioridad.
¿Qué es una operación iniciada por el usuario?
Una operación iniciada por el usuario es una operación que se inicia mediante una API para cada solicitud. Spanner agrupa estas solicitudes en tipos de operaciones categorías y puedes mostrar cada tipo de operación como una línea en la pestaña CPU de uso 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 |
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 lecturas dentro de las transacciones de lectura y escritura. |
read_withpartitiontoken | Read StreamingRead |
Incluye operaciones de lectura realizadas mediante un conjunto de tokens de partición. |
executesql_select_readonly | ExecuteSql ExecuteStreamingSql |
Incluye la ejecución de la sentencia SQL de selección y las consultas de flujo de cambios. |
executesql_select_readwrite | ExecuteSql ExecuteStreamingSql |
Incluye la ejecución de la sentencia SELECT dentro de las transacciones de lectura y escritura. |
executesql_select_withpartitiontoken | ExecuteSql ExecuteStreamingSql |
Incluye la sentencia Select de ejecución realizada con un conjunto de tokens de partición. |
executesql_dml_readwrite | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Incluye la ejecución de la sentencia SQL DML. |
executesql_dml_partitioned | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Incluye ejecutar instrucción de SQL DML particionada. |
beginorcommit | BeginTransaction Commit Rollback |
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 de entrega internas urgentes, etcétera. |
Este es un ejemplo de gráfico de la métrica Uso de CPU por tipos 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 en el menú Prioridad de la parte superior del gráfico. Representa 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 desselectando su respectivo filtro de categoría.
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 del uso de CPU por tipo de operación en el Explorador de métricas
- En la consola de Google Cloud, selecciona Monitoring, o usa el siguiente botón:
- Selecciona Explorador de métricas en el panel de navegación.
-
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. -
En el campo Filtro, ingresa el valor
instance_id
, luego ingresa el ID de la instancia que deseas examinar y haz clic en Aplicar. -
En el campo Agrupar por, selecciona
category
lista desplegable. En el gráfico, se mostrará el uso de la 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 en la sección anterior, ayudó a determinar si un usuario o una tarea del sistema provocó un aumento en la CPU de recursos, y la métrica Uso de CPU por tipo de operación y conozca el tipo de operación iniciada por el usuario detrás de este aumento en la CPU de uso de la nube.
Identifica qué solicitud del usuario está contribuyendo a aumentar el uso de la CPU
Para determinar qué solicitud de usuario específica es responsable del aumento repentino en la CPU de uso en el gráfico del tipo de operación executesql_select_readonly que ves en Figura 2: usarás las tablas integradas de estadísticas de introspección para obtener más información.
Utiliza la siguiente tabla como guía para determinar qué tabla de estadísticas consultar. según el tipo de operación que causa el alto uso de la CPU.
Tipo de operación | Consulta | Leer | Transacción |
---|---|---|---|
read_readonly | No | Sí | No |
read_readwrite | No | Sí | Sí |
read_withpartitiontoken | No | Sí | No |
executesql_select_readonly | Sí | No | No |
executesql_select_withpartitiontoken | Sí | No | No |
executesql_select_readwrite | Sí | No | Sí |
executesql_dml_readwrite | Sí | No | Sí |
executesql_dml_partitioned | No | No | Sí |
beginorcommit | No | No | Sí |
Por ejemplo, si el problema es read_withpartitiontoken, usa las estadísticas de lectura para solucionarlo.
En esta situación, la operación executesql_select_readonly parece ser el motivo del aumento del uso de la CPU que observas. En función de la tabla anterior, debes consultar las estadísticas de consultas para saber qué consultas son costosas, se ejecutan con frecuencia o analizan muchos datos.
Para conocer 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;
En el resultado, se mostrarán las consultas ordenadas por uso de CPU. Una vez que identifiques la consulta con el uso más alto de CPU, puedes probar las siguientes opciones para ajustarlo.
Revisa el plan de ejecución de consultas para identificar posibles ineficiencias que puedan contribuir a un alto uso de la CPU.
Revisa tu consulta para asegurarte de que siga las prácticas recomendadas de SQL.
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 Spanner ejecuta una consulta durante un intervalo. Con este modelo de referencia, podrás detectar y 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 Spanner maneje una carga de trabajo mayor. Para obtener más información, consulta Aumenta la capacidad de procesamiento.
¿Qué sigue?
Obtén más información sobre las métricas de uso de CPU.
Obtén más información sobre otras herramientas de introspección.
Obtén información sobre la supervisión con Cloud Monitoring.
Obtén más información sobre las prácticas recomendadas de SQL para Spanner
Consulta la lista de métricas de Spanner.