En esta página se describe cómo usar las métricas y los gráficos de utilización de la CPU, así como otras herramientas de introspección, para investigar el uso elevado de la CPU en tu base de datos.
Identificar si una tarea del sistema o del usuario está provocando un uso elevado de la CPU
La consolaGoogle Cloud proporciona varias herramientas de monitorización para Spanner, lo que te permite ver el estado de las métricas más importantes de tu instancia. Una de ellas es el gráfico Uso de CPU (total). En este gráfico se muestra el uso total de la CPU como porcentaje de los recursos de CPU de la instancia, desglosado por prioridad de tarea y tipo de operación. Hay dos tipos de tareas: tareas de usuario, como las operaciones de lectura y escritura, y tareas del sistema, que abarcan tareas en segundo plano automatizadas, como la compactación y el relleno de índices.
La figura 1 muestra un ejemplo del gráfico Uso de CPU - Total.
Imagen 1. Gráfico Uso de CPU (total) del panel de control Monitorización de la consola deGoogle Cloud .
Ahora, imagina que recibes una alerta de Cloud Monitoring que indica que el uso de la CPU ha aumentado significativamente. Abre el panel de control Monitorización de tu instancia en la consola de Google Cloud y consulta el gráfico Uso de CPU - Total en la consola de Google Cloud . Como se muestra en la figura 1, puedes ver el aumento del uso de la CPU debido a las tareas de usuario de alta prioridad. El siguiente paso es averiguar qué operación de usuario de alta prioridad está provocando este aumento del uso de la CPU.
Puede visualizar esta y otras métricas en una serie temporal mediante los paneles de control Estadísticas de las consultas. Estos paneles de control predefinidos te ayudan a ver los picos de uso de la CPU e identificar las consultas ineficientes.
Identificar qué operación del usuario está provocando el pico de uso de la CPU
El gráfico Uso de CPU (total) de la figura 1 muestra que las tareas de usuario de alta prioridad son la causa del mayor uso de CPU.
A continuación, examinarás el gráfico Utilización de CPU por tipo de operación en la consolaGoogle 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 a través de una solicitud de API. Spanner agrupa estas solicitudes en tipos de operaciones o categorías, y puede mostrar cada tipo de operación como una línea en el gráfico 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 API | Descripción |
|---|---|---|
| read_readonly | Leer StreamingRead |
Incluye lecturas que obtienen filas de la base de datos mediante búsquedas y análisis de claves. |
| read_readwrite | Leer StreamingRead |
Incluye las lecturas dentro de las 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 instrucciones SQL SELECT y consultas de cambio de flujo. |
| executesql_select_readwrite | ExecuteSql ExecuteStreamingSql |
Incluye la ejecución de la instrucción Select en transacciones de lectura y escritura. |
| executesql_select_withpartitiontoken | ExecuteSql ExecuteStreamingSql |
Incluye la instrucción SELECT ejecutada con un conjunto de tokens de partición. |
| executesql_dml_readwrite | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Incluye la ejecución de instrucciones SQL DML. |
| executesql_dml_partitioned | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Incluye la ejecución de instrucciones 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 sesiones, operaciones de servicio internas críticas para el tiempo, etc. |
Aquí tienes un ejemplo de gráfico de la métrica Uso de CPU por tipo de operación.
Imagen 2. Gráfico Uso de CPU por tipo de operación en la consolaGoogle Cloud .
Para limitar la visualización a una prioridad específica, usa el menú Prioridad situado en 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 muestran debajo del gráfico identifican cada uno de ellos. Puedes ocultar y mostrar cada gráfico seleccionando o desmarcando el filtro de categoría correspondiente.
También puede crear este gráfico en el explorador de métricas, tal como se describe a continuación:
Crear un gráfico de 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:
- En el panel de navegación, selecciona Explorador de métricas.
-
En el campo Find resource type and metric, introduce el valor
spanner.googleapis.com/instance/cpu/utilization_by_operation_typey, a continuación, selecciona la fila que aparece debajo del cuadro. -
En el campo Filtro, introduce el valor
instance_idy, a continuación, introduce el ID de instancia que quieras 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 la CPU de las tareas de usuario agrupadas por tipo de operación o categoría.
Mientras que la métrica Uso de CPU por prioridad de la sección anterior le ha ayudado a determinar si una tarea del usuario o del sistema ha provocado un aumento del uso de recursos de la CPU, con la métrica Uso de CPU por tipo de operación puede profundizar y averiguar el tipo de operación iniciada por el usuario que ha provocado este aumento del uso de la CPU.
Identificar qué solicitud de usuario está contribuyendo a un mayor uso de la CPU
Para determinar qué solicitud de usuario específica es la responsable del pico de uso de la CPU en el gráfico del tipo de operación executesql_select_readonly que se muestra en la figura 2, utilizará 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 debes consultar en función del tipo de operación que esté provocando un uso elevado 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, soluciona el problema con las estadísticas de lectura.
En este caso, la operación executesql_select_readonly parece ser la causa del aumento del uso de CPU que estás observando. Según la tabla anterior, deberías consultar las estadísticas de consultas para saber qué consultas son caras, se ejecutan con frecuencia o analizan muchos datos.
Para consultar las consultas con el mayor uso de CPU en la hora anterior, puede 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 hayas identificado la consulta con el mayor uso de CPU, puedes probar las siguientes opciones para optimizarla.
Revisa el plan de ejecución de la consulta para identificar posibles ineficiencias que puedan contribuir a un uso elevado de la CPU.
Revisa tu consulta para asegurarte de que sigue las prácticas recomendadas de SQL.
Revisa el diseño del esquema de la base de datos y actualízalo para que las consultas sean más eficientes.
Establece una base de referencia para el número de veces que Spanner ejecuta una consulta durante un intervalo. Con esta base, podrá detectar e investigar la causa de cualquier desviación inesperada del comportamiento normal.
Si no has encontrado ninguna consulta que consuma muchos recursos de CPU, añade capacidad de computación a la instancia. Al añadir capacidad de computación, se proporcionan más recursos de CPU y Spanner puede gestionar una mayor carga de trabajo. Para obtener más información, consulta Aumentar la capacidad de computación.
Siguientes pasos
Consulta información sobre las métricas de uso de CPU.
Consulta información sobre otras herramientas de introspección.
Consulta información sobre Monitoring con Cloud Monitoring.
Consulta más información sobre las prácticas recomendadas de SQL para Spanner.
Consulte la lista de métricas de Spanner.