À partir de la version 26.0.213, un script Invantive peut se rapporter lui-même. Le nouveau fournisseur de services script expose le profil d’exécution du script en cours sous forme de quatre tables SQL de métadonnées (dictionnaire de données). La durée, les comptes de lignes et le résultat de chaque instruction peuvent être interrogés avec une simple instruction select au lieu d’être lus dans un fichier journal après coup.
Cet article décrit ce que contient le fournisseur, comment trouver les instructions lentes dans un script Invantive, et quelles limitations s’appliquent.
Ce que Contient le Fournisseur de Services script
Le fournisseur de services script est toujours présent dans une base de données et n’a pas besoin d’entrée dans le fichier de paramètres. Il fournit quatre tables en lecture seule :
Runs@script: une ligne par exécution d’un script, avec sa source, son imbrication et son résultat.StatementExecutions@script: une ligne par instruction exécutée du script, avec son texte, ses mesures et son résultat.Variables@script: les variables de script en vigueur, avec leur origine.OsCommands@script: les commandes du système d’exploitation lancées au nom du script.
Les instructions SQL affichent les données comme d’habitude :
Cela couvre le processus dans lequel les instructions s’exécutent. Il est maintenu en mémoire et démarre vide chaque fois que le programme Invantive est lancé, de sorte qu’une requête renvoie uniquement les instructions du processus en cours.
Le fournisseur est disponible dans les produits incluant Invantive Script, tels que Invantive Data Hub et Invantive Query Tool. Il n’est pas disponible sur Invantive Cloud, conformément à Invantive Script lui-même, étant donné qu’Invantive Script est destiné au traitement côté client.
Trouver les Instructions les Plus Lentes dans un Script
L’utilisation la plus courante est de découvrir où se concentre le temps d’un script ETL nocturne. L’instruction suivante liste les dix instructions les plus lentes qui se sont terminées :
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
En plus de la durée réelle DURATION_MS, la table contient CPU_MS, IO_MS et SLEEP_MS, qui séparent le calcul de l’attente. Une instruction avec un SLEEP_MS élevé attend une limitation de la plateforme plutôt que de travailler.
Rapporter les Instructions qui ont Échoué
Le résultat de chaque instruction est enregistré qu’elle ait réussi ou non :
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 indique le comportement qui était en vigueur lorsque l’instruction a échoué, avec les options EXIT, CONTINUE, IGNORE et DEFAULT. Cela permet de distinguer une instruction autorisée à échouer de celle qui aurait dû arrêter l’exécution.
Totaliser le Temps par Type d’Instruction
Un script mélange des instructions SQL, des instructions locales de Invantive Script et des commandes système. L’instruction suivante totalise le temps par 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
Instructions Répétées
STATEMENT_HASH contient le hachage SHA-256 de l’instruction telle qu’elle a été écrite, avant que les variables de script soient remplacées par leurs valeurs. Grouper sur cette colonne réunit donc les exécutions d’une instruction dans une boucle, bien que chaque exécution se soit faite avec des valeurs différentes :
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
Voir aussi :
