Analyser Invantive Script-udførelser ved hjælp af Invantive Script-dataordbogen

Fra version 26.0.213 kan et Invantive Script rapportere om sig selv. Den nye script-serviceudbyder eksponerer eksekveringsprofilen af det kørende script som fire SQL-tabeller med metadata (datadictionary). Varigheden, rækkeantal og resultatet af hver sætning kan forespørges med en simpel select-sætning i stedet for at blive læst tilbage fra en logfil bagefter.

Denne artikel beskriver, hvad udbyderen indeholder, hvordan man finder de langsomme sætninger i et Invantive Script, og hvilke begrænsninger der gælder.

Hvad script-serviceudbyderen Indeholder

Serviceudbyderen script er altid til stede i en database og kræver ingen post i indstillingsfilen. Det leverer fire skrivebeskyttede tabeller:

  • Runs@script: én række per kørslen af et script, med dets kilde, indlejring og resultat.
  • StatementExecutions@script: én række per eksekveret scriptsætning, med dets tekst, målinger og resultat.
  • Variables@script: de scripting-variabler, der er aktive, med deres oprindelse.
  • OsCommands@script: operativsystems-kommandoer startet på vegne af scriptet.

SQL-sætninger viser dataene som altid:

Den dækker processen, hvor sætningerne kører. Den holdes i hukommelsen og starter tom hver gang Invantive-programmet startes, så en forespørgsel returnerer kun sætningerne fra den aktuelle proces.

Udbyderen er tilgængelig i de produkter, der inkluderer Invantive Script, såsom Invantive Data Hub og Invantive Query Tool. Den er ikke tilgængelig på Invantive Cloud, i tråd med Invantive Script selv, da Invantive Script er til klientside behandling.

Find de Langsomste Sætninger i et Script

Den mest almindelige anvendelse er at finde ud af, hvor tiden for et natligt ETL-script går hen. Følgende sætning viser de ti langsomste sætninger, der er afsluttet:

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

Ud over væguretiden DURATION_MS indeholder tabellen CPU_MS, IO_MS og SLEEP_MS, som adskiller beregning fra venten. En sætning med en høj SLEEP_MS venter på en hastighedsgrænse for en platform i stedet for at udføre arbejde.

Rapporter de Sætninger, der Fejlede

Resultatet af hver sætning registreres, uanset om den lykkedes eller ej:

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 angiver den adfærd, der var gældende, når sætningen fejlede, som er en af EXIT, CONTINUE, IGNORE og DEFAULT. Det gør det muligt at skelne en sætning, der havde lov til at fejle, fra en, der burde have stoppet kørsel.

Opgør Tiden per Type Sætning

Et script blander SQL-sætninger, lokale sætninger fra Invantive Script og operativsystems-kommandoer. Følgende sætning opgør 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

Gentagne Sætninger

STATEMENT_HASH indeholder SHA-256 hash af sætningen, som den blev skrevet, før scripting-variablerne blev erstattet med deres værdier. Gruppering på den bringer derfor eksekveringen af én sætning i en løkke sammen, selvom hver eksekvering blev kørt med forskellige værdier:

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