Statistiche DML partizionate attive

Activepartied Data Manipulation Language (DML) fornisce l'avanzamento in tempo reale per i DML partizionati attualmente attivi nel database.

Spanner fornisce una tabella integrata, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, in cui sono elencati i DML partizionati in esecuzione e i progressi fatti.

In questo articolo, descriveremo la tabella in dettaglio, mostreremo alcune query di esempio che la utilizzano e, infine, dimostreremo come utilizzarle per ridurre i problemi causati da DML partizionati attivi.

Disponibilità

I dati di SPANNER_SYS sono disponibili solo tramite interfacce SQL, ad esempio:

Altri metodi di lettura singoli 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 della 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 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 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 del DML partizionato. Aggiornato dopo il completamento di una partizione.

Esempi di query

Puoi eseguire le seguenti istruzioni SQL di esempio 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
AGGIORNA Concerti SET VenueId = \'locale incredibile\' 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 Cantanti 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
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 22-01-2024 15:57:39.049799-08:00

Limitazioni

L'utilizzo della tabella SPANNER_SYS.ACTIVE_PARTITIONED_DMLS prevede le seguenti limitazioni:

  • I risultati PROGRESS, ROWS_PROCESSED e LAST_UPDATE_TIMESTAMP vengono incrementati in corrispondenza dei limiti di partizione completati, in modo che il file DML partizionato possa continuare ad aggiornare le righe, mentre i valori in 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. Utilizza NUM_PARTITIONS_COMPLETE e NUM_TRIVIAL_PARTITIONS_COMPLETE per consultare l'avanzamento con maggiore granularità.

  • Se annulli un DML partizionato utilizzando una richiesta RPC, il DML partizionato annullato potrebbe comunque essere visualizzato nella tabella. Se annulli un DML partizionato utilizzando l'eliminazione della sessione, questo viene rimosso immediatamente dalla tabella. Per ulteriori informazioni, consulta la sezione 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. Considera ad esempio lo scenario in cui l'uso della CPU è elevato e vuoi rispondere alle seguenti domande.

  • Quanti DML partizionati sono in esecuzione al momento?
  • Cosa sono questi DML partizionati?
  • Quanti di questi DML partizionati sono in esecuzione per molto tempo?
  • In quale sessione è in esecuzione la query?

Se hai le risposte alle domande precedenti, puoi decidere di intraprendere la seguente 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 di eseguire la seguente query per restituire il conteggio delle DML partizionate attive.

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 ulteriori informazioni sulle prime 2 DML partizionate in esecuzione meno recenti, ordinate 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 Concerti SET VenueId = \'locale incredibile\' 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 questo 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