La función DML particionado activo proporciona progreso en tiempo real 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 las operaciones de DML particionadas en ejecución y el progreso realizado en ellas.
En esta página, se describe la tabla en detalle, se muestran algunas consultas de ejemplo que usan esta tabla y, por último, se explica cómo usar estas consultas para ayudar a mitigar los problemas causados por los DML particionados activos. La información de esta página se aplica a las bases de datos con dialecto de GoogleSQL y a las bases de datos con dialecto de PostgreSQL.
Accede a las estadísticas activas del DML particionado
Spanner proporciona las estadísticas de DML particionado activas en el esquema SPANNER_SYS
. Puedes acceder a los datos de SPANNER_SYS
de las siguientes maneras:
La página Spanner Studio de una base de datos en la consola de Google Cloud
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 son compatibles con SPANNER_SYS
:
- Realizar una lectura sólida desde una o varias filas de una tabla
- Realizar una lectura inactiva desde una o varias filas en una tabla
- Leer desde una o varias filas en un índice secundario
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
devuelve 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 SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nombre de la columna | Tipo | Descripción |
---|---|---|
TEXT |
STRING |
Es el texto de la declaración de la consulta de DML particionado. |
TEXT_FINGERPRINT |
INT64 |
La huella digital es un hash del texto del DML particionado. |
SESSION_ID |
STRING |
ID de la sesión que ejecuta el DML particionado. Borrar el ID de sesión cancelará la búsqueda. |
NUM_PARTITIONS_TOTAL |
INT64 |
Es 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 |
Es 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 completadas dividida por la cantidad total de particiones no triviales. |
ROWS_PROCESSED |
INT64 |
Es la cantidad de filas procesadas hasta el momento, que se actualiza después de que se completa cada partición. |
START_TIMESTAMP |
TIMESTAMP |
Es un límite superior para la hora de inicio de un DML particionado. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Es la última marca de tiempo en la que el DML particionado avanzó. Se actualiza después de que se completa una partición. |
Consultas de ejemplo
Puedes ejecutar las siguientes instrucciones de SQL de ejemplo con las bibliotecas cliente, Google Cloud CLI o la consola deGoogle Cloud .
Cómo enumerar las consultas en ejecución más antiguas
La siguiente consulta devuelve una lista de DML 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 | #googlecloudcertified | 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.00% | 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.00% | 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 partición completados, por lo que el DML particionado podría seguir actualizando filas mientras los valores de estos tres campos permanecen iguales.Si hay millones de particiones en un DML particionado, es posible que el valor de la columna
PROGRESS
no capture todo el progreso incremental. UsaNUM_PARTITIONS_COMPLETE
yNUM_TRIVIAL_PARTITIONS_COMPLETE
para hacer referencia a un progreso más detallado.Si cancelas una operación DML particionada con una solicitud de RPC, es posible que la operación DML particionada cancelada siga apareciendo en la tabla. Si cancelas un DML particionado con la eliminación de la sesión, se quitará de la tabla de inmediato. Para obtener más información, consulta Cómo borrar el ID de sesión.
Usa datos de consultas DML particionadas activas para solucionar problemas de uso de CPU
Las estadísticas de consultas y las estadísticas de transacciones proporcionan información útil cuando se solucionan problemas de latencia en una base de datos de Spanner. Estas herramientas proporcionan información sobre las búsquedas que ya se completaron. Sin embargo, a veces es necesario saber qué se está ejecutando en el sistema. Por ejemplo, considera la situación en la que el uso de CPU es alto y deseas 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 ejecutan durante mucho tiempo?
- ¿Qué sesión está ejecutando la consulta?
Si tienes respuestas para las preguntas anteriores, puedes decidir tomar la siguiente acción.
- Borra la sesión que ejecuta la consulta para obtener una resolución inmediata.
- Reduce la frecuencia de una instrucción DML particionada.
En el siguiente recorrido, examinaremos los DML particionados activos y determinaremos qué acción tomar, si es que hay alguna.
Recupera un resumen de las sentencias DML particionadas activas
En nuestro ejemplo, notamos un uso de CPU más alto de lo normal, por lo que decidimos ejecutar la siguiente consulta para devolver el recuento de DML particionados activos.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La consulta arroja el siguiente resultado.
active_count |
---|
22 |
Enumera los 2 DML particionados en ejecución más antiguos
Luego, podemos ejecutar una consulta para encontrar más información sobre los 2 DML particionados en ejecución más antiguos, 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 |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50.00% | 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 |
Cómo cancelar una consulta costosa
Encontramos un DML particionado que se ejecuta desde hace días y no avanza. Por lo tanto, podemos ejecutar el siguiente comando gcloud spanner databases sessions
delete
para borrar la sesión con 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
¿Qué sigue?
- Obtén más información sobre otras herramientas de introspección.
- Obtén información sobre qué otra información almacena Spanner para cada base de datos en las tablas de esquema de información de la base de datos.
- Obtén más información sobre las prácticas recomendadas de SQL para Spanner.