C’est une possibilité de contrôler les requêtes SQL sur le temps d’exécution estimée ou sur la mémoire temporaire , se base sur le plan d’accès créé par l’optimiseur pour votre requête.
C’est la commande CHGQRYA qui permet cette opération
paramètres QRYTIMLMT( ) et QRYSTGLMT( ) pour le temps et la mémoire
Exemple
CHGQRYA JOB(123456/PLB/QPADEV0001) QRYTIMLMT(45)
Vous exécutez votre requête, si elle dépasse 45 secondes un message CPA4259 qui nécessite une réponse est envoyé au travail
Si vous répondez I ca continue,
La requête excède la limite de durée ou de mémoire définie (C I)
? I
C si vous voulez arrêter la requête
La requête dépasse la limite de durée ou de mémoire définie.
? C
SQL query exceeds specified limit or threshold.
Vous pouvez estimer le temps d’exécution d’une requête
Mettre le temps maxi à zéro
CHGQRYA QRYTIMLMT(0)
Lancer la requêtes
Retrouvez le message CPA4259 et répondez C
Si vous faites sur le message vous avez le temps d’exécution estimée
ID message . . . . . . : CPA4259
Date d’envoi . . . . . : 26/04/22 Heure d’envoi . . . . : 14:23:33
Message . . . . : La requête excède la limite de durée ou de mémoire définie
(C I)
Cause . . . . . : La requête de base de données qui allait démarrer a une
durée d’exécution estimée à 12, ce qui excède la limite indiquée 0, ou son
utilisation de mémoire temporaire de 1 dépasse la limite spécifiée
- Les limites de durée de requête et de mémoire temporaire sont
définies via la commande CL CHGQRYA.
remettre la valeur par défaut
CHGQRYA QRYTIMLMT(*SYSVAL)
remarque
Attention si vous avez de requêtes sous forme de curseur dans un sqlrpgle par exemple
Le traitement ne s’arrête pas , mais votre open cursor va recevoir un SQLCODE -666, si vous avez des traitements dépendants ca peut être gênant. il est donc conseillé de rajouter le contrôle derrière cette opération
exemple
if sqlcode = -666 ;
dsply ‘Estimation requête excessive’ ;
*inlr = *on ;
return;
Endif;
Pour mettre une réponse automatique C
Utiliser la table de réponse de travaux
par exemple
ADDRPYLE SEQNBR(56) MSGID(CPA4259) CMPDTA(PLB 51) RPY(C)
puis indiquer que le travail est en réponse auto
CHGJOB INQMSGRPY(*SYSRPYL)
Vous pouvez également indiquer quel fichier qaqqini vous voulez utiliser
paramètre CHGQRYA QRYOPTLIB(PLB)
Vous devez indiquer la bibliothèque ou ce trouve votre fichier d’options
plus d’informations ici
https://www.ibm.com/docs/fr/i/7.5?topic=supervisor-query-example-exit-programs
https://www.ibm.com/docs/en/i/7.4?topic=governor-how-use