DML (Active partizionate Data Manipulation Language) fornisce l'avanzamento in tempo reale per i DML partizionati attualmente attivi nel tuo database.
Spanner fornisce una tabella integrata, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, che elenca i DML partizionati e lo stato di avanzamento eseguito.
In questo articolo descriveremo la tabella in dettaglio, mostreremo alcuni esempi di query che utilizzano questa tabella e, infine, mostreremo come utilizzare queste query per mitigare i problemi causati da DML partizionati attivi.
Disponibilità
I dati di SPANNER_SYS
sono disponibili solo tramite interfacce SQL, ad esempio:
La pagina Spanner Studio di un database nella console Google Cloud
Il comando
gcloud spanner databases execute-sql
L'API
executeQuery
Altri metodi di lettura singola forniti da Spanner non supportano SPANNER_SYS
.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
restituisce un elenco di DML partizionati attivi ordinati in base all'ora di inizio.
Schema tabella
Di seguito è riportato lo schema della tabella per SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nome colonna | Tipo | Descrizione |
---|---|---|
TEXT |
STRING |
Il testo dell'istruzione di query DML partizionato. |
TEXT_FINGERPRINT |
INT64 |
L'impronta è un hash del testo DML partizionato. |
SESSION_ID |
STRING |
L'ID della sessione che esegue il DML partizionato. L'eliminazione dell'ID sessione annullerà la query. |
NUM_PARTITIONS_TOTAL |
INT64 |
Il numero totale di partizioni nel DML partizionato. |
NUM_PARTITIONS_COMPLETE |
INT64 |
Il numero di partizioni completate dal DML partizionato. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
Il numero di partizioni complete in cui non è stata elaborata alcuna riga. |
PROGRESS |
DOUBLE |
L'avanzamento di un DML partizionato viene calcolato dividendo il numero di partizioni non banali completate per il numero totale di partizioni non banali. |
ROWS_PROCESSED |
INT64 |
Il numero di righe elaborate finora, aggiornato al completamento di ogni partizione. |
START_TIMESTAMP . |
TIMESTAMP |
Un limite superiore all'ora di inizio di un DML partizionato. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Ultimo timestamp dell'avanzamento del DML partizionato. Aggiornamento dopo il completamento di una partizione. |
Esempi di query
Puoi eseguire le istruzioni SQL di esempio riportate di seguito utilizzando le librerie client, Google Cloud CLI o la console Google Cloud.
Elenco delle query in esecuzione meno recenti
La seguente query restituisce un elenco di DML partizionati in esecuzione ordinati in base all'ora di inizio della query.
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;
testo | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | progressi | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'meravigliosa sede\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50,00% | 2398654 | 21-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
ELIMINA da Singers WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20,00% | 238654 | 22-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:19.049799-08:00 |
UPDATE Singers 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 |
Limitazioni
L'utilizzo della tabella SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
presenta le seguenti limitazioni:
I risultati di
PROGRESS
,ROWS_PROCESSED
eLAST_UPDATE_TIMESTAMP
vengono incrementati in corrispondenza dei limiti delle partizioni completati, in modo che il codice DML partizionato possa continuare ad aggiornare le righe, mentre i valori in questi tre campi rimangono gli stessi.Se un DML partizionato contiene milioni di partizioni, il valore nella colonna
PROGRESS
potrebbe non acquisire tutti i progressi incrementali. UtilizzaNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
per controllare l'avanzamento della granularità.Se annulli un DML partizionato utilizzando una richiesta RPC, il DML partizionato annullato potrebbe ancora essere visualizzato nella tabella. Se annulli un DML partizionato utilizzando l'eliminazione della sessione, questo verrà rimosso immediatamente dalla tabella. Per ulteriori informazioni, consulta la sezione sull'eliminazione dell'ID sessione.
Usa i dati delle query DML partizionate attive per risolvere i problemi relativi all'utilizzo elevato della CPU
Le statistiche sulle query e le statistiche sulle transazioni forniscono informazioni utili per la risoluzione dei problemi di latenza in un database Spanner. Questi strumenti forniscono informazioni sulle query già completate. Tuttavia, a volte è necessario sapere cosa è in esecuzione nel sistema. Ad esempio, considera lo scenario in cui l'utilizzo della CPU è elevato e vuoi rispondere alle domande seguenti.
- Quanti DML partizionati sono in esecuzione al momento?
- Cosa sono i DML partizionati?
- Quanti di questi DML partizionati sono in esecuzione da molto tempo?
- In quale sessione viene eseguita la query?
Se hai risposte alle domande precedenti, puoi decidere di intraprendere l'azione riportata di seguito.
- Eliminare la sessione che esegue la query per una risoluzione immediata.
- Riduci la frequenza di un DML partizionato.
Nella procedura dettagliata che segue, esaminiamo i DML partizionati attivi e determiniamo quale azione, se presente, eseguire.
Recupera un riepilogo dei DML partizionati attivi
Nel nostro scenario di esempio, notiamo un utilizzo della CPU superiore al normale, quindi decidiamo di eseguire la seguente query per restituire il numero di DML partizionati attivi.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La query restituisce il seguente risultato.
active_count |
---|
22 |
Elenco dei primi 2 DML partizionati in esecuzione meno recenti
Possiamo quindi eseguire una query per trovare ulteriori informazioni sui primi 2 DML partizionati in esecuzione meno recenti, ordinati in base all'ora di inizio del DML partizionato.
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;
testo | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | progressi | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'meravigliosa sede\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50,00% | 2398654 | 21-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
Annullare una query costosa
Abbiamo trovato un DML partizionato che è in esecuzione da giorni e non sta facendo progressi. Possiamo quindi eseguire il seguente comando gcloud spanner databases sessions delete
per eliminare la sessione utilizzando l'ID sessione che annulla il DML partizionato.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
Passaggi successivi
- Scopri di più su altri strumenti di introspezione.
- Scopri altre informazioni archiviate da Spanner per ogni database nelle tabelle dello schema di informazioni del database.
- Scopri di più sulle best practice per SQL per Spanner.