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å:
