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 consola deGoogle 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, expresado 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 automatizadas en segundo plano, como la compactación y el relleno de índices.
En la figura 1 se muestra un ejemplo del gráfico Uso de CPU - Total.
Imagen 1. Gráfico Uso de CPU (total) del panel de control Monitoring de la consola de Google Cloud Google 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 Monitoring de tu instancia en la consola de Google Cloud y consulta el gráfico Utilización de CPU - Total en la consola de Cloud. Como se muestra en la figura 1, puedes ver el aumento del uso de la CPU debido a las tareas de usuario de prioridad alta. 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 de Estadísticas de las consultas. Estos paneles de control predefinidos le 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 imagen 1 muestra que las tareas de usuario de prioridad alta son la causa del mayor uso de la CPU.
A continuación, examinarás el gráfico Utilización de CPU por tipo de operación en la consola de Cloud. En este gráfico se muestra la utilización de la CPU desglosada 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 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 la 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 | Leer 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 consola Google Cloud .
Puedes limitar la visualización a una prioridad específica mediante 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. Puede ocultar y mostrar cada gráfico seleccionando o deseleccionando 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_type
y, a continuación, selecciona la fila que aparece debajo del cuadro. -
En el campo Filtrar, introduce el valor
instance_id
y, a continuación, introduce el ID de instancia que quieras examinar y haz clic en > Aplicar. -
En el campo Agrupar por, selecciona
category
en 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 te 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 puedes 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 utilización de la CPU en el gráfico de tipo de operación executesql_select_readonly que se muestra en la imagen 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, consulta las estadísticas de lectura para solucionarlo.
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 saber qué consultas han tenido 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 identifiques 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 permitir consultas más eficientes.
Establece una base 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. Añadir capacidad de computación proporciona más recursos de CPU y permite que Spanner gestione una carga de trabajo mayor. Para obtener más información, consulta el artículo 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.