Analyseer Invantive Script-uitvoeringen met behulp van het Invantive Script-gegevenswoordenboek

Vanaf release 26.0.213 kan een Invantive Script rapporteren over zichzelf. De nieuwe script service provider stelt het uitvoeringsprofiel van het draaiende script bloot als vier SQL-tabellen van metadata (gegevenswoordenboek). De duur, rijtellingen en uitkomst van elke instructie kunnen worden opgevraagd met een eenvoudig select statement in plaats van achteraf uit een logbestand te worden gelezen.

Dit artikel beschrijft wat de provider bevat, hoe je de langzame instructies kunt vinden in een Invantive Script en welke beperkingen van toepassing zijn.

Wat de script Service Provider Bevat

De service provider script is altijd aanwezig in een database en heeft geen vermelding in het instellingenbestand nodig. Het biedt vier alleen-lezentabellen:

  • Runs@script: één rij per uitvoering van een script, met de bron, de nesting en de uitkomst.
  • StatementExecutions@script: één rij per uitgevoerde scriptinstructie, met de tekst, de metingen en de uitkomst.
  • Variables@script: de actieve scriptvariabelen, met hun oorsprong.
  • OsCommands@script: de besturingssysteemopdrachten gestart namens het script.

SQL-instructies geven altijd de gegevens weer:

Dit dekt het proces waarin de instructies worden uitgevoerd. Het wordt in het geheugen gehouden en start elke keer dat het Invantive-programma wordt gestart leeg, dus een query retourneert alleen de instructies van het huidige proces.

De provider is beschikbaar in de producten die Invantive Script bevatten, zoals Invantive Data Hub en Invantive Query Tool. Hij is niet beschikbaar op Invantive Cloud, in lijn met Invantive Script zelf, aangezien Invantive Script bedoeld is voor client-side verwerking.

Vind de Traagste Instructies in een Script

Het meest gebruikelijke doel is om erachter te komen waar de tijd van een nachtelijk ETL-script naartoe gaat. De volgende instructie lijst de tien traagste instructies die zijn voltooid:

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

Naast de klokduur DURATION_MS bevat de tabel CPU_MS, IO_MS en SLEEP_MS, die berekening van wachten scheiden. Een instructie met een hoge SLEEP_MS wacht op een snelheidsbeperking van een platform in plaats van werk te doen.

Rapporteer de Instructies die Mislukten

De uitkomst van elke instructie wordt geregistreerd, of deze nu is geslaagd of niet:

select sen.id
,      sen.statement_type
,      sen.error_message_code
,      sen.error_message
from   StatementExecutions@script sen
where  sen.successful = false
order 
by     sen.id desc

ON_ERROR_MODE geeft het gedrag aan dat van kracht was toen de instructie mislukte, en kan één van EXIT, CONTINUE, IGNORE en DEFAULT zijn. Dat maakt het mogelijk om een instructie te onderscheiden die mocht falen van een instructie die de uitvoering had moeten stoppen.

Sommeer de Tijd per Soort Instructie

Een script mixt SQL-instructies, lokale instructies van Invantive Script en besturingssysteemopdrachten. De volgende instructie somt de tijd per soort op:

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

Herhaalde Instructies

STATEMENT_HASH bevat de SHA-256-hash van de instructie zoals deze is geschreven, voordat de scriptvariabelen door hun waarden werden vervangen. Groeperen op deze waarde brengt daardoor de uitvoeringen van één instructie in een lus samen, hoewel elke uitvoering met verschillende waarden werd uitgevoerd:

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

Zie ook: