Analyser Invantive Script-kjøringer ved hjelp av Invantive Script-databasen

Fra og med versjon 26.0.213 kan et Invantive Script rapportere om seg selv. Den nye script-tjenesteleverandøren eksponerer kjøreprofilen til det kjørende skriptet som fire SQL-tabeller med metadata (datadictionary). Varighet, radtall og resultat av hver setning kan forespørres med en enkel SELECT-setning i stedet for å leses tilbake fra en loggfil i etterkant.

Denne artikkelen beskriver hva leverandøren inneholder, hvordan du finner de trege setningene i et Invantive Script, og hvilke begrensninger som gjelder.

Hva script-tjenesteleverandøren inneholder

Tjenesteleverandøren script er alltid til stede i en database og trenger ingen oppføring i innstillingsfilen. Den gir fire skrivebeskyttede tabeller:

  • Runs@script: én rad per kjøring av et skript, med kilde, nestede nivåer og resultat.
  • StatementExecutions@script: én rad per skriptsetning som er utført, med tekst, målinger og resultat.
  • Variables@script: skriptvariablene som er i bruk, med opprinnelse.
  • OsCommands@script: operativsystemkommandoene startet på vegne av skriptet.

SQL-setninger viser dataene som alltid:

Dette dekker prosessen der setningene kjøres. Den lagres i minnet og starter tom hver gang Invantive-programmet starter, så en forespørsel returnerer kun setningene for den gjeldende prosessen.

Leverandøren er tilgjengelig i produktene som inkluderer Invantive Script, som Invantive Data Hub og Invantive Query Tool. Den er ikke tilgjengelig på Invantive Cloud, i tråd med Invantive Script selv, siden Invantive Script er for klientbehandling.

Finn de tregeste setningene i et skript

Den vanligste bruken er å finne ut hvor tiden i et nattlig ETL-skript går. Følgende setning lister de ti tregeste setningene som har fullført:

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

I tillegg til veggklokkens varighet DURATION_MS inneholder tabellen CPU_MS, IO_MS og SLEEP_MS, som skiller kalkulasjon fra venting. En setning med høy SLEEP_MS venter på en plattformens hastighetsgrense i stedet for å utføre arbeid.

Rapporter setningene som mislyktes

Resultatet av hver setning blir registrert uansett om den lyktes eller ikke:

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 angir hvilken atferd som var i bruk da setningen mislyktes, og kan være en av EXIT, CONTINUE, IGNORE og DEFAULT. Dette gjør det mulig å skille en setning som fikk lov til å mislykkes fra en som skulle ha stoppet kjøringen.

Sum opp tiden per type setning

Et skript blander SQL-setninger, lokale setninger fra Invantive Script og operativsystemkommandoer. Følgende setning summerer tiden per type:

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

Gjentatte setninger

STATEMENT_HASH inneholder SHA-256 hashen av setningen slik den var skrevet, før skriptvariablene ble erstattet med sine verdier. Gruppeberegning på den samler derfor utførelsene av én setning i en løkke, selv om hver utførelse kjørte med ulike verdier:

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

Se også: