A partire dalla versione 26.0.213, uno script Invantive può generare un report su se stesso. Il nuovo service provider script espone il profilo di esecuzione dello script in esecuzione come quattro tabelle SQL di metadati (dizionario dei dati). La durata, i conteggi delle righe e l’esito di ogni istruzione possono essere interrogati con una semplice istruzione select invece di essere letti successivamente da un file di log.
Questo articolo descrive cosa contiene il provider, come trovare le istruzioni lente in uno script Invantive e quali limitazioni si applicano.
Cosa Contiene il Service Provider script
Il service provider script è sempre presente in un database e non necessita di nessuna voce nel file delle impostazioni. Fornisce quattro tabelle di sola lettura:
Runs@script: una riga per ogni esecuzione di uno script, con la sua origine, il suo annidamento e il suo esito.StatementExecutions@script: una riga per ogni istruzione dello script eseguita, con il suo testo, le sue misurazioni e il suo esito.Variables@script: le variabili di scripting in uso, con la loro origine.OsCommands@script: i comandi del sistema operativo avviati per conto dello script.
Le istruzioni SQL visualizzano i dati come sempre:
L’immagine copre il processo in cui vengono eseguite le istruzioni. È memorizzata in memoria e inizia vuota ogni volta che viene avviato il programma Invantive, quindi una query restituisce solo le istruzioni del processo corrente.
Il provider è disponibile nei prodotti che includono Invantive Script, come Invantive Data Hub e Invantive Query Tool. Non è disponibile su Invantive Cloud, in linea con Invantive Script stesso, poiché Invantive Script è per l’elaborazione lato client.
Trovare le Istruzioni Più Lente in uno Script
L’uso più comune è scoprire dove va il tempo di uno script ETL notturno. La seguente istruzione elenca le dieci istruzioni più lente che sono state completate:
select sen.id
, sen.statement_type
, sen.sql_operation
, sen.duration_ms
, sen.rows_affected
, substr(sen.statement_text, 1, 60) statement_text
from StatementExecutions@script sen
where sen.ended_utc is not null
order
by sen.duration_ms desc
limit 10
Oltre alla durata in tempo reale DURATION_MS, la tabella contiene CPU_MS, IO_MS e SLEEP_MS, che separano il calcolo dall’attesa. Un’istruzione con un alto valore di SLEEP_MS sta aspettando un limite di velocità di una piattaforma piuttosto che eseguire calcoli.
Segnalare le Istruzioni che Hanno Fallito
L’esito di ciascuna istruzione viene registrato sia che abbia avuto successo o meno:
select sen.id
, sen.statement_type
, sen.error_message_code
, sen.error_message
from StatementExecutions@script sen
whe sen.successful = false
order
by sen.id desc
ON_ERROR_MODE indica il comportamento in uso quando l’istruzione è fallita, che può essere uno tra EXIT, CONTINUE, IGNORE e DEFAULT. Ciò consente di distinguere un’istruzione che era consentita fallire da una che avrebbe dovuto fermare l’esecuzione.
Totale del Tempo per Tipo di Istruzione
Uno script mescola istruzioni SQL, istruzioni locali di Invantive Script e comandi del sistema operativo. La seguente istruzione totalizza il tempo per tipo:
select sen.statement_type
, count(*) statements
, sum(sen.duration_ms) duration_ms
from StatementExecutions@script sen
group
by sen.statement_type
order
by sen.duration_ms desc
Istruzioni Ripetute
STATEMENT_HASH contiene l’hashing SHA-256 dell’istruzione come è stata scritta, prima che le variabili di scripting fossero sostituite dai loro valori. Raggruppandosi su di esso si riuniscono quindi le esecuzioni di una stessa istruzione in un ciclo, anche se ogni esecuzione è stata eseguita con valori diversi:
select sen.statement_hash
, count(*) executions
, sum(sen..duration_ms) duration_ms
, max(substr(sen.statement_text_raw, 1, 60)) statement_start
from StatementExecutions@script sen
group
by sen.statement_hash
order
by sen.duration_ms desc
Vedi anche:
