Activepartied Data Manipulation Language (DML) fornisce dati in tempo reale lo stato di avanzamento delle DML partizionate attualmente attive in del database.
Spanner offre una tabella integrata,
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, che elenca le DML partizionate
e i progressi compiuti.
In questo articolo, descriveremo la tabella in dettaglio, mostreremo alcuni esempi query che usano questa tabella e, infine, dimostrare come utilizzare queste per ridurre 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
La
gcloud spanner databases execute-sql
comandoAPI
executeQuery
Gli altri metodi di lettura singola forniti da Spanner non supportanoSPANNER_SYS
.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
restituisce un elenco di DML partizionate attive ordinate 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 partizionata. |
TEXT_FINGERPRINT |
INT64 |
L'impronta è un hash del testo DML partizionato. |
SESSION_ID |
STRING |
L'ID della sessione che sta eseguendo il DML partizionato. Se elimini l'ID sessione, la query verrà annullata. |
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 sono state elaborate righe. |
PROGRESS |
DOUBLE |
L'avanzamento di un'istruzione DML partizionata 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 dopo il completamento di ogni partizione. |
START_TIMESTAMP . |
TIMESTAMP |
Un limite superiore all'ora di inizio di un DML partizionato. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Ultimo timestamp relativo all'avanzamento della DML partizionata. Aggiornato dopo il completamento di una partizione. |
Esempi di query
Puoi eseguire le seguenti istruzioni SQL di esempio utilizzando il client librerie, Google Cloud CLI, oppure 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'inizio alla data e ora 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 |
---|---|---|---|---|---|---|---|---|
AGGIORNA SET Per i concerti VenueId = \'sede incredibile\' DOVE SingerId < 900.000 | 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 Cantanti WHERE SingerId > 1.000.000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20,00% | 238654 | 22-01-2024 15:56:30.498744-08:00 | 2024-01-22 15:56:19.049799-08:00 |
AGGIORNA Cantanti IMPOSTA MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 22-01-2024 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
comporta quanto segue:
limitazioni:
I risultati
PROGRESS
,ROWS_PROCESSED
eLAST_UPDATE_TIMESTAMP
vengono incrementati ai confini delle partizioni completate, pertanto la DML partizionata potrebbe continuare ad aggiornare le righe mentre i valori in questi tre campi rimangono invariati.Se ci sono milioni di partizioni in un DML partizionato, il valore in la colonna
PROGRESS
potrebbe non registrare tutti i progressi incrementali. UtilizzaNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
per fare riferimento a un avanzamento con una granularità più fine.Se annulli un DML partizionato utilizzando una richiesta RPC, potrebbe essere ancora visualizzato nella tabella. Se annulli una partizione DML con l'eliminazione della sessione, quest'ultimo viene rimosso immediatamente dalla tabella. Per ulteriori informazioni, consulta la sezione Eliminazione dell'ID sessione.
Utilizzare i dati delle query DML partizionate attive per risolvere i problemi di utilizzo elevato della CPU
Statistiche sulle query e statistiche sulle transazioni forniscono informazioni utili per la risoluzione dei problemi di latenza in un database Spanner. Questi strumenti forniscono informazioni sulle query che sono già stati completati. Tuttavia, a volte è necessario sapere cosa è in esecuzione nel sistema. Ad esempio, considera lo scenario di utilizzo è elevato e devi rispondere alle seguenti domande.
- Quante DML partizionate sono in esecuzione al momento?
- Cosa sono questi DML partizionati?
- Quanti di questi DML partizionati vengono eseguiti da molto tempo?
- In quale sessione è in esecuzione la query?
Se hai risposte alle domande precedenti, puoi decidere di rispondere alle seguenti domande un'azione.
- Elimina la sessione che esegue la query per una risoluzione immediata.
- Riduci la frequenza di un DML partizionato.
Nella procedura dettagliata che segue, esamineremo i file DML partizionati attivi e stabiliamo 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 Esegui questa query per restituire il conteggio dei 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 meno recenti in esecuzione
Possiamo quindi eseguire una query per trovare maggiori informazioni sui primi 2 meno recenti DML partizionati 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 |
---|---|---|---|---|---|---|---|---|
AGGIORNA SET Per i concerti VenueId = \'sede incredibile\' DOVE SingerId < 900.000 | 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'istruzione DML partizionata in esecuzione da giorni che non sta facendo progressi. Possiamo
quindi esegui questo 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ù sugli altri strumenti di introspezione.
- Scopri di più sulle altre informazioni che Spanner archivia per ogni database nella schema di informazioni del database.
- Scopri di più sulle best practice SQL per Spanner.