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 alto de CPU en tu base de datos.
Identifica si una tarea del sistema o del usuario está causando un uso elevado de la CPU
La consola deGoogle Cloud proporciona varias herramientas de supervisión para Spanner, lo que te permite ver el estado de las métricas más importantes de 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 los recursos de CPU de la instancia, desglosado por prioridad de tarea y tipo de operación. Existen dos tipos de tareas: tareas del usuario, como lecturas y escrituras, y 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 Uso de CPU: total en el panel de Monitoring de la consola deGoogle Cloud
Ahora imagina que recibes una alerta de Cloud Monitoring que indica que el uso de la CPU aumentó significativamente. Abre el panel Monitoring de tu instancia en la consola de Google Cloud y examina el gráfico CPU Utilization - Total en la consola de Google Cloud . Como se muestra en la Figura 1, puedes ver el aumento en el uso de CPU de las tareas de usuario de alta prioridad. El siguiente paso es averiguar qué operación del 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 los paneles de Estadísticas de búsquedas. Estos paneles prediseñados te ayudan a ver los aumentos repentinos en el uso de la CPU y a identificar las consultas ineficientes.
Identifica qué operación del usuario está causando el aumento repentino en el uso de la CPU
El gráfico Uso de CPU: Total de la Figura 1 muestra que las tareas del usuario de alta prioridad 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 deGoogle 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 una operación que se inicia a través de una solicitud de 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 de Utilización 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 |
Incluye lecturas que recuperan filas de la base de datos con 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 las operaciones de lectura realizadas con un conjunto de tokens de partición. |
| executesql_select_readonly | ExecuteSql ExecuteStreamingSql |
Incluye la ejecución de la instrucción de SQL de selección y las consultas de transmisión de cambios. |
| executesql_select_readwrite | ExecuteSql ExecuteStreamingSql |
Incluye la ejecución de la instrucción Select dentro de transacciones de lectura y escritura. |
| executesql_select_withpartitiontoken | ExecuteSql ExecuteStreamingSql |
Incluye la instrucción 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 instrucción de SQL de DML. |
| executesql_dml_partitioned | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Incluye la ejecución de la instrucción de SQL de DML particionado. |
| 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 internas de servicio críticas para el tiempo, etcétera. |
Este es un ejemplo de gráfico de la métrica Uso de CPU por tipo de operación.
Figura 2. Gráfico Uso de CPU por tipo de operación en la consola deGoogle Cloud .
Puedes limitar la visualización a una prioridad específica con el menú Prioridad que se encuentra en la parte superior del gráfico. Representa cada tipo o categoría de operación en un gráfico de líneas. Las categorías que se enumeran debajo del gráfico identifican cada uno de ellos. Puedes ocultar y mostrar cada gráfico seleccionando o deseleccionando su filtro de categoría respectivo.
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 para el uso de CPU por tipo de operación en el Explorador de métricas
- En la Google Cloud consola, 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_typey, 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
categoryen 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 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 averiguar 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 al aumento del uso de CPU
Para determinar qué solicitud específica del usuario es responsable del aumento repentino en el uso de la CPU en el gráfico del 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 genera un uso de CPU elevado.
| 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, soluciona el problema con las estadísticas de lectura.
En esta situación, la operación executesql_select_readonly parece ser la causa del aumento en el uso de la CPU que observas. Según la tabla anterior, debes consultar las estadísticas de consultas a continuación para averiguar qué consultas son costosas, se ejecutan con frecuencia o analizan muchos datos.
Para encontrar 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 mayor uso de CPU, puedes probar las siguientes opciones para ajustarla.
Revisa el plan de ejecución de la consulta para identificar posibles ineficiencias que podrían contribuir a un uso elevado 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 actualízalo para permitir que se realicen consultas más eficientes.
Establece una referencia para la cantidad de veces que Spanner ejecuta una consulta durante un intervalo. Con esta base de referencia, podrás detectar e investigar la causa de cualquier variación inesperada del comportamiento normal.
Si no encontraste una consulta que requiere 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 Cómo aumentar 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 más información sobre 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.