Statistiche sulle DML partizionate attive

Il DML (Data Manipulation Language) partizionato attivo fornisce il progresso in tempo reale delle 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 gli avanzamenti compiuti.

Questa pagina descrive la tabella in dettaglio, mostra alcune query di esempio che la utilizzano e, infine, dimostra come utilizzare queste query per contribuire ad attenuare i problemi causati dalle istruzioni DML partizionate attive. Le informazioni riportate in questa pagina si applicano ai database in dialetto GoogleSQL e ai database in dialetto PostgreSQL.

Disponibilità

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

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 messe in ordine 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 digitale è un hash del testo DML partizionato.
SESSION_ID STRING L'ID della sessione che esegue la DML partizionata. L'eliminazione dell'ID sessione annullerà la query.
NUM_PARTITIONS_TOTAL INT64 Il numero totale di partizioni nella DML partizionata.
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'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 fino a quel momento, aggiornato al termine di ogni partizione.
START_TIMESTAMP. TIMESTAMP Un limite superiore per l'ora di inizio di un'istruzione DML partizionata.
LAST_UPDATE_TIMESTAMP TIMESTAMP Ultimo timestamp relativo all'avanzamento della DML partizionata. 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 console Google Cloud.

Elenco delle query in esecuzione meno recenti

La seguente query restituisce un elenco di DML partizionate in esecuzione ordinate 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 avanzamento 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 21/01/2024 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 22/01/2024 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 i seguenti limiti:

  • I risultati PROGRESS, ROWS_PROCESSED e LAST_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 in un modello DML partizionato sono presenti milioni di partizioni, il valore nella colonna PROGRESS potrebbe non acquisire tutti gli avanzamenti incrementali. Utilizza NUM_PARTITIONS_COMPLETE e NUM_TRIVIAL_PARTITIONS_COMPLETE per fare riferimento a un avanzamento con una granularità più fine.

  • Se annulli un'istruzione DML partizionata utilizzando una richiesta RPC, l'istruzione DML partizionata annullata potrebbe essere ancora visualizzata nella tabella. Se annulli un'istruzione DML partitioned utilizzando l'eliminazione della sessione, questa viene rimossa immediatamente dalla tabella. Per ulteriori informazioni, vedi Eliminare l'ID sessione.

Utilizzare i dati delle query DML partizionate attive per risolvere i problemi di 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 queste istruzioni DML partizionate?
  • Quante di queste istruzioni DML partizionate sono in esecuzione da molto tempo?
  • In quale sessione viene eseguita la query?

Se hai 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 una DML partizionata.

Nella procedura dettagliata che segue, esaminiamo le DML partizionate attive e determiniamo se è necessario intraprendere un'azione.

Recupera un riepilogo delle DML partizionate attive

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 in esecuzione più vecchi

Possiamo quindi eseguire una query per trovare ulteriori informazioni sulle prime 2 DML partizionate in esecuzione più vecchie, ordinate in base all'ora di inizio della 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 avanzamento 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 21/01/2024 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 22/01/2024 15:55:18.498744-08:00 2024-01-22 15:56:28.049799-08:00

Annullare una query dispendiosa

Abbiamo trovato una DML partizionata in esecuzione da giorni che non fa 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