Lenguaje de manipulación de datos (DML) particionado activo: proporciona información en tiempo real sobre el progreso de los DMLs particionados que están activos en tu base de datos.
Spanner proporciona una tabla integrada, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, que muestra las instrucciones DML con particiones en ejecución y el progreso que se ha realizado en ellas.
En esta página se describe la tabla en detalle, se muestran algunas consultas de ejemplo que la usan y, por último, se explica cómo usar estas consultas para mitigar los problemas causados por las instrucciones de DML con particiones activas. La información de esta página se aplica a las bases de datos con dialecto GoogleSQL y con dialecto PostgreSQL.
Acceder a estadísticas de DML particionado activas
Spanner proporciona las estadísticas de DML particionado activo en el esquema SPANNER_SYS
. Puedes acceder a los datos de SPANNER_SYS
de las siguientes formas:
La página Spanner Studio de una base de datos en la Google Cloud consola.
El comando
gcloud spanner databases execute-sql
.El método
executeSql
o el métodoexecuteStreamingSql
.
Los siguientes métodos de lectura única que proporciona Spanner no admiten SPANNER_SYS
:
- Realizar una lectura fuerte desde una sola fila o varias filas en una tabla.
- Realizar una lectura inactiva de una sola fila o varias filas en una tabla.
- Leer desde una sola fila o varias filas en un índice secundario.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
devuelve una lista de DMLs particionados activos
ordenados por su hora de inicio.
Esquema de tabla
A continuación, se muestra el esquema de la tabla SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nombre de la columna | Tipo | Descripción |
---|---|---|
TEXT |
STRING |
Texto de la instrucción de consulta DML particionada. |
TEXT_FINGERPRINT |
INT64 |
La huella digital es un hash del texto DML particionado. |
SESSION_ID |
STRING |
ID de la sesión que ejecuta el DML particionado. Si eliminas el ID de sesión, se cancelará la consulta. |
NUM_PARTITIONS_TOTAL |
INT64 |
Número total de particiones del DML particionado. |
NUM_PARTITIONS_COMPLETE |
INT64 |
Número de particiones que ha completado el DML particionado. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
Número de particiones completas en las que no se ha procesado ninguna fila. |
PROGRESS |
DOUBLE |
El progreso de un DML particionado se calcula como el número de particiones no triviales completadas dividido entre el número total de particiones no triviales. |
ROWS_PROCESSED |
INT64 |
Número de filas procesadas hasta el momento, que se actualiza después de que se completa cada partición. |
START_TIMESTAMP . |
TIMESTAMP |
Límite superior de la hora de inicio de un DML particionado. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Marca de tiempo de la última vez que se avanzó en el DML particionado. Se actualiza cuando se completa una partición. |
Consultas de ejemplo
Puedes ejecutar las siguientes instrucciones SQL de ejemplo con las bibliotecas de cliente, Google Cloud CLI o la Google Cloud consola.
Listar las consultas en ejecución más antiguas
La siguiente consulta devuelve una lista de DMLs particionados en ejecución ordenados por la hora de inicio 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 | progreso | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
DELETE FROM Singers WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20% | 238654 | 2024-01-22 15:56:30.498744-08:00 | 2024-01-22 15:56:19.049799-08:00 |
UPDATE Singers SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 2024-01-22 15:57:47.498744-08:00 | 2024-01-22 15:57:39.049799-08:00 |
Limitaciones
El uso de la tabla SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
tiene las siguientes limitaciones:
Los resultados de
PROGRESS
,ROWS_PROCESSED
yLAST_UPDATE_TIMESTAMP
se incrementan en los límites de las particiones completadas, por lo que es posible que el DML particionado siga actualizando filas mientras los valores de estos tres campos no cambian.Si hay millones de particiones en una DML particionada, es posible que el valor de la columna
PROGRESS
no refleje todo el progreso incremental. UsaNUM_PARTITIONS_COMPLETE
yNUM_TRIVIAL_PARTITIONS_COMPLETE
para referirte a un progreso más detallado.Si cancelas una DML particionada mediante una solicitud RPC, es posible que la DML particionada cancelada siga apareciendo en la tabla. Si cancelas una DML particionada mediante la eliminación de la sesión, se elimina de la tabla inmediatamente. Para obtener más información, consulta Eliminar el ID de sesión.
Usar datos de consultas DML con particiones activas para solucionar problemas de uso elevado de la CPU
Las estadísticas de consultas y las estadísticas de transacciones proporcionan información útil para solucionar problemas de latencia en una base de datos de Spanner. Estas herramientas proporcionan información sobre las consultas que ya se han completado. Sin embargo, a veces es necesario saber qué se está ejecutando en el sistema. Por ejemplo, supongamos que el uso de la CPU es elevado y quieres responder a las siguientes preguntas.
- ¿Cuántas DMLs particionadas se están ejecutando en este momento?
- ¿Qué es DML particionado?
- ¿Cuántas de esas DMLs particionadas se están ejecutando durante mucho tiempo?
- ¿Qué sesión está ejecutando la consulta?
Si tienes respuestas a las preguntas anteriores, puedes tomar la siguiente medida.
- Elimina la sesión que ejecuta la consulta para obtener una solución inmediata.
- Reduce la frecuencia de un DML particionado.
En el siguiente tutorial, examinamos las DMLs particionadas activas y determinamos qué acción debemos llevar a cabo, si procede.
Recuperar un resumen de las DMLs particionadas activas
En nuestro ejemplo, observamos un uso de CPU superior al normal, por lo que decidimos ejecutar la siguiente consulta para obtener el recuento de DMLs particionados activos.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La consulta da el siguiente resultado.
active_count |
---|
22 |
Mostrar las dos DMLs particionadas en ejecución más antiguas
A continuación, podemos ejecutar una consulta para obtener más información sobre las dos DMLs con particiones más antiguas ordenadas por la hora de inicio de la DML con particiones.
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 | progreso | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
Cancelar una consulta costosa
Hemos detectado una DML particionada que lleva días ejecutándose y no avanza. Por lo tanto, podemos ejecutar el siguiente comando gcloud spanner databases sessions
delete
para eliminar la sesión mediante el ID de sesión, lo que cancela el DML particionado.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
Siguientes pasos
- Consulta información sobre otras herramientas de introspección.
- Consulta más información sobre los datos que almacena Spanner de cada base de datos en las tablas del esquema de información de la base de datos.
- Consulta más información sobre las prácticas recomendadas de SQL para Spanner.