DML (Data Manipulation Language) partizionato attivo fornisce l'avanzamento in tempo reale delle istruzioni DML partizionate attive nel tuo database.
Spanner fornisce una tabella integrata,
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, che elenca le istruzioni DML partizionate in esecuzione
e lo stato di avanzamento.
Questa pagina descrive in dettaglio la tabella, mostra alcune query di esempio che la utilizzano e, infine, illustra come utilizzare queste query per contribuire a mitigare i problemi causati dalle istruzioni DML partizionate attive. Le informazioni riportate in questa pagina si applicano ai database con dialetto GoogleSQL e PostgreSQL.
Accedere alle statistiche DML partizionate attive
Spanner fornisce le statistiche DML partizionate attive nello schema SPANNER_SYS
. Puoi utilizzare i seguenti metodi per accedere ai dati di SPANNER_SYS
:
La pagina Spanner Studio di un database nella console Google Cloud .
Il comando
gcloud spanner databases execute-sql
.Il metodo
executeSql
oexecuteStreamingSql
.
I seguenti metodi di lettura singola forniti da Spanner
non supportano SPANNER_SYS
:
- Esecuzione di una lettura coerente da una o più righe di una tabella.
- Esecuzione di una lettura obsoleta da una o più righe di una tabella.
- Lettura da una singola riga o da più righe in un indice secondario.
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 viene mostrato lo schema della tabella per SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nome colonna | Tipo | Descrizione |
---|---|---|
TEXT |
STRING |
Il testo dell'istruzione di query DML partizionata. |
TEXT_FINGERPRINT |
INT64 |
L'impronta è un hash del testo DML partizionato. |
SESSION_ID |
STRING |
L'ID della sessione che esegue 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 dalla DML partizionata. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
Il numero di partizioni complete in cui non sono state elaborate righe. |
PROGRESS |
DOUBLE |
L'avanzamento di un DML partizionato viene calcolato come il numero di partizioni non banali completate diviso 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 in cui il DML partizionato ha fatto progressi. Aggiornato al termine di una partizione. |
Esempi di query
Puoi eseguire i seguenti esempi di istruzioni SQL utilizzando le librerie client, Google Cloud CLI o la Google Cloud console.
Elenco delle query in esecuzione da più tempo
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 | progress | 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,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 |
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 ai limiti delle partizioni completate, pertanto la DML partizionata potrebbe continuare ad aggiornare le righe mentre i valori di questi tre campi rimangono invariati.Se in un DML partizionato sono presenti milioni di partizioni, il valore nella colonna
PROGRESS
potrebbe non acquisire tutti i progressi incrementali. UtilizzaNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
per fare riferimento a progressi con una granularità più fine.Se annulli un'istruzione DML partizionata utilizzando una richiesta RPC, l'istruzione DML partizionata annullata potrebbe comunque essere visualizzata nella tabella. Se annulli un DML partizionato utilizzando l'eliminazione della sessione, questo viene rimosso immediatamente dalla tabella. Per saperne di più, vedi Eliminare l'ID sessione.
Utilizzare 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 seguenti domande.
- Quante DML partizionate sono in esecuzione al momento?
- Che cosa sono questi DML partizionati?
- Quante di queste istruzioni DML partizionate sono in esecuzione da molto tempo?
- Quale sessione sta eseguendo la query?
Se hai risposto alle domande precedenti, puoi decidere di intraprendere l'azione successiva.
- Elimina la sessione che esegue la query per una risoluzione immediata.
- Ridurre la frequenza di un DML partizionato.
Nella seguente procedura dettagliata esaminiamo le istruzioni DML partizionate attive e determiniamo quale azione intraprendere, se necessario.
Recupera un riepilogo delle istruzioni DML partizionate attive
Nello scenario di esempio, notiamo un utilizzo della CPU superiore al normale, quindi decidiamo di eseguire la seguente query per restituire il conteggio delle istruzioni DML partizionate attive.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
La query produce il seguente risultato.
active_count |
---|
22 |
Elenco delle prime due istruzioni DML partizionate in esecuzione più vecchie
Possiamo quindi eseguire una query per trovare maggiori informazioni sulle due istruzioni DML partizionate in esecuzione più vecchie ordinate in base all'ora di inizio dell'istruzione DML partizionata.
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 | progress | 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 |
Annullare una query costosa
Abbiamo trovato un DML partizionato in esecuzione da giorni che 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 l'istruzione DML partizionata.
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 di più sulle altre informazioni archiviate da Spanner per ogni database nelle tabelle dello schema informativo del database.
- Scopri di più sulle best practice per SQL per Spanner.