Estadísticas activas de DML particionado

El lenguaje de manipulación de datos (DML) particionado activo proporciona tiempo real progreso para los DML particionados que están activos en tu base de datos.

Spanner proporciona una tabla integrada, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, que enumera los DML particionados en ejecución y el progreso alcanzado.

En este artículo, describiremos la tabla en detalle y mostraremos algunos ejemplos consultas que usan esta tabla y, por último, demostrarás cómo usar estas para mitigar los problemas que generan los DML particionados activos.

Disponibilidad

Los datos de SPANNER_SYS solo están disponibles a través de interfaces SQL. por ejemplo:

Otros métodos de lectura única que proporciona Spanner no son compatibles. SPANNER_SYS.

ACTIVE_PARTITIONED_DMLS

SPANNER_SYS.ACTIVE_PARTITIONED_DMLS muestra una lista de DML particionados activos ordenados por su hora de inicio.

Esquema de la tabla

A continuación, se muestra el esquema de la tabla para SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.

Nombre de la columna Tipo Descripción
TEXT STRING Texto de la declaración de consulta de DML particionada.
TEXT_FINGERPRINT INT64 La huella digital es un hash del texto DML particionado.
SESSION_ID STRING Es el ID de la sesión que ejecuta el DML particionado. Si borras el ID de sesión, se cancelará la consulta.
NUM_PARTITIONS_TOTAL INT64 La cantidad total de particiones en el DML particionado.
NUM_PARTITIONS_COMPLETE INT64 Es la cantidad de particiones que completó el DML particionado.
NUM_TRIVIAL_PARTITIONS_COMPLETE INT64 La cantidad de particiones completas en las que no se procesaron filas.
PROGRESS DOUBLE El progreso de un DML particionado se calcula como la cantidad de particiones no triviales completas dividida por la cantidad total de particiones no triviales.
ROWS_PROCESSED INT64 La cantidad de filas procesadas hasta el momento, actualizadas después de que se complete cada partición.
START_TIMESTAMP TIMESTAMP Un límite superior en la hora de inicio de un DML particionado.
LAST_UPDATE_TIMESTAMP TIMESTAMP Última marca de tiempo del progreso del DML particionado Se actualiza después de que se completa una partición.

Consultas de ejemplo

Puedes ejecutar las siguientes instrucciones de SQL de ejemplo con el comando client bibliotecas, Google Cloud CLI Consola de Google Cloud.

Enumera las consultas en ejecución más antiguas

La siguiente consulta muestra una lista de los DML particionados en ejecución ordenados por inicio hora de la consulta.

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC;
texto session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete #googlecloudcertified rows_processed start_timestamp last_update_timestamp
ACTUALIZAR conciertos SET DÓNDE SingerId < 900,000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50.00% 2398654 2024-01-21 15:56:30.498744-08:00 22-01-2024 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = &#39;&#39; 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00% 0 22-01-2024 15:55:18.498744-08:00 22-01-2024 15:56:28.049799-08:00
DELETE de Singers WHERE SingerId > 1000,000 0071a85e-7e5c-576b-8a17-f9bc3d157eea 8 4 3 20% 238654 22-01-2024 15:56:30.498744-08:00 22-01-2024 15:56:19.049799-08:00
ACTUALIZAR cantantes SET MarketingBudget = 1000 WHERE true 036097a9-91d4-566a-a399-20c754eabdc2 8 5 0 62,50% 238654 22-01-2024 15:57:47.498744-08:00 22-01-2024 15:57:39.049799-08:00

Limitaciones

El uso de la tabla SPANNER_SYS.ACTIVE_PARTITIONED_DMLS tiene lo siguiente: limitaciones:

  • Los resultados PROGRESS, ROWS_PROCESSED y LAST_UPDATE_TIMESTAMP son se incrementan en los límites de partición completos para que el DML particionado podría seguir actualizando las filas mientras los valores de estos tres campos permanecen iguales.

  • Si hay millones de particiones en un DML particionado, el valor en es posible que la columna PROGRESS no capte todo el progreso incremental. Usa NUM_PARTITIONS_COMPLETE y NUM_TRIVIAL_PARTITIONS_COMPLETE para consultar un progreso con mayor nivel de detalle.

  • Si cancelas un DML particionado mediante una solicitud de RPC, el error Es posible que el DML particionado siga apareciendo en la tabla. Si cancelas una partición DML que usa la eliminación de sesiones, se quita de la tabla de inmediato. Para obtener más información, consulta Borra el ID de sesión.

Usa datos de consultas de DML particionadas activas para solucionar problemas de uso de CPU elevado

Estadísticas de consultas y estadísticas de transacciones proporcionar información útil a la hora de solucionar problemas de latencia en una base de datos de Spanner. Estas herramientas proporcionan información sobre las consultas que datos ya completados. Sin embargo, a veces es necesario saber qué se ejecuta en el sistema. Por ejemplo, considera la situación en la que la CPU el uso es alto y quieres responder las siguientes preguntas.

  • ¿Cuántos DML particionados se están ejecutando en este momento?
  • ¿Qué son estos DML particionados?
  • ¿Cuántos de esos DML particionados se están ejecutando durante mucho tiempo?
  • ¿Qué sesión ejecuta la consulta?

Si ya respondiste las preguntas anteriores, puedes tomar las siguientes acción.

  • Borra la sesión que ejecuta la consulta para obtener una resolución inmediata.
  • Reduce la frecuencia de un DML particionado.

En la siguiente explicación, examinaremos los DML particionados activos y determinaremos qué acción, si corresponde, tomar.

Recuperar un resumen de los DML particionados activos

En la situación de ejemplo, notamos un uso de CPU más alto de lo normal, por lo que decidimos ejecuta la siguiente consulta para mostrar el recuento de DML particionados activos.

SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;

La consulta muestra el siguiente resultado.

active_count
22

Obtén una lista de los 2 DML particionados en ejecución más antiguos

Luego, podemos ejecutar una consulta para obtener más información sobre las 2 más antiguas que ejecutan DML particionados ordenados por la hora de inicio del DML particionado

SELECT text,
       session_id,
       num_partitions_total,
       num_partitions_complete,
       num_trivial_partitions_complete,
       progress,
       rows_processed,
       start_timestamp,
       last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC LIMIT 2;
texto session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete #googlecloudcertified rows_processed start_timestamp last_update_timestamp
ACTUALIZAR conciertos SET DÓNDE SingerId < 900,000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50.00% 2398654 2024-01-21 15:56:30.498744-08:00 22-01-2024 15:56:39.049799-08:00
UPDATE Singers SET LastName = NULL WHERE LastName = &#39;&#39; 0028284f-0190-52f9-b396-aa588e034806 8 4 4 00% 0 22-01-2024 15:55:18.498744-08:00 22-01-2024 15:56:28.049799-08:00

Cancela una consulta costosa

Encontramos un DML particionado que se ejecuta por días y no está progresando. Podemos Por lo tanto, ejecuta el siguiente comando gcloud spanner databases sessions delete. para borrar la sesión con el ID de sesión, que cancela el DML particionado.

gcloud spanner databases sessions delete\
   5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
    --database=singer_db --instance=test-instance

¿Qué sigue?