|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Bonjour,
j'ai préféré ouvrir un nouveau post car il s'agit d'un EXPLAIN PLAN que je ne parviens pas faire marcher... Voici la sysin Code :
SQLERROR ON EXPLAIN COMMAND, PREPARE FUNCTION RESULT OF SQL STATEMENT: DSNT408I SQLCODE = -204, ERROR: OPC.CFVTP IS AN UNDEFINED NAME DSNT418I SQLSTATE = 42704 SQLSTATE RETURN CODE DSNT415I SQLERRP = DSNXOTL SQL PROCEDURE DETECTING ERROR DSNT416I SQLERRD = -500 0 0 -1 0 0 SQL DIAGNOSTIC INFORMATION DSNT416I SQLERRD = X'FFFFFE0C' X'00000000' X'00000000' X'FFFFFFFF' X'000 INFORMATION Merci pour votre aide. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 641 ![]() |
Salut,
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
J'ai réussi à le faire passer en retirant le SET CURRENT SQLID = 'OPC';
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
C'est pas une erreur de syntaxe ... C'est juste que comme le nom de la table dans l'instructuin EXPLAIN n'était pas qualifié, DB2 a pris le SQLID courant pour former un nom complet qui, manifestement, n'est pas le bon ...
Edit : Et donc, qu'est-ce qui donne ton EXPLAiN ? |
|
|
00
|
|
|
#5 | ||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Justement, j'y arrive.
J'ai utiliser le JCL suivant Code :
Je sais qu'il y a un programme qui permet d'obtenir un résultat sur une seule ligne, ce qui est beaucoup plus lisible... mais je ne me souvient plus lequel... |
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Je ne peux pas en interactif, je n'ai pas les autorisations... Je suis obligé de passer par OPC...
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
|
|
|
00
|
|
|
#9 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Tu ne crois pas si bien dire....
Dès que je retrouve ce programme je reviens vers vous. |
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Administrateur de base de données Inscription : octobre 2006 Messages : 503 ![]() |
En général, j'utilise une requête sql écrite pour:
|
|
|
00
|
|
|
#11 | ||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Salut bernard59139, j'ai l'autorisation sur Platinum de la PLAN_TABLE mais j'ai ce message quand je veux browse :
Code :
Y-a-t'il une autre autorisation à avoir ? |
||
|
|
00
|
|
|
#12 | ||||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Bon alors tant pis j'ai fait un select classique par batch :
Code :
Code :
|
||||
|
|
00
|
|
|
#13 | |
|
Membre chevronné
![]() Administrateur de base de données Inscription : octobre 2006 Messages : 503 ![]() |
Citation:
il faut être autorisé pout utiliser chacune de ces applications |
|
|
|
00
|
|
|
#14 |
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Mais alors comment connaître le nom de ce programme ou de ce plan afin que je puisse faire une demande d'autorisation.
Il faut autoriser sur un plan, une table un package ? |
|
|
00
|
|
|
#15 |
|
Membre chevronné
![]() Administrateur de base de données Inscription : octobre 2006 Messages : 503 ![]() |
Le nom de l'application devrait être écrit qque part.
si je me souviens bien, ca correspond à un plan dans db2, Normalement, ton admin devrais savoir. |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 096 ![]() |
Donc c'est bien un accès via l'index :
ACCESSTYPE = I sans utilisation de l'aborescence : MATCHCOLS = 0 c'est ce qu'on appelle un " NON MATCHING INDEX SCAN " La bonne nouvelle c'est qu'on a : PREFETCH = S ce qui est plutôt favorable ... Questions : 1) est-ce que l'index IXBANC est l'index CLUSTER sur la table ? 2) en plus de la PLAN_TABLE est-ce que tu as une DSN_STATEMNT_TABLE ? |
|
|
00
|
|
|
#17 | ||
|
Membre actif
![]() Inscription : juin 2008 Messages : 146 ![]() |
Tu scannes l'index en faisant du séquential prefetch. Dont acte. Malheureusement, tu n'es pas en Indexonly. Cela signifie que tu vas scanner l'index et pour chaque ligne de l'index, DB2 te renverra également sur les datas. Ca donne un double scan. En général, ce n'est pas génial, il est préférable de scanner directement la table, DB2 se chargeant de faire ensuite un tri des lignes résultantes, plutôt que de profiter de l'index pour faire le tri. Evidemment, il y a des exceptions ou le tri par l'index est meilleur, DB2 n'étant pas un long fleuve tranquille.
Concernant la PLAN_TABLE, voici le SELECT que je réalise après un EXPLAIN, sachant que j'édite le résultat grâce à un petit easytrieve, ce qui me permet d'avoir un résultat lisible et simple à analyser. Code :
|
||
|
|
00
|
|
|
#18 | |||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#19 | |||
|
Membre confirmé
![]() Inscription : mars 2004 Messages : 1 187 ![]() |
Citation:
Et qu'est-ce que easytrieve ? Qu'appelle-tu scanner directement la table ? |
|||
|
|
00
|
|
|
#20 |
|
Membre actif
![]() Inscription : juin 2008 Messages : 146 ![]() |
Pas de clause Where : normal, je n'ai fourni que les expressions sélectionnées. Tu es libre de ne cibler que les lignes qui t'intéressent avec le queryno en particulier.
Easytrieve est un petit langage de programmation qui permet de faire de manière extrêmement simple des éditions, des lectures de fichiers, ... Sur Zos, tu écrits en 10 lignes ce qui t'en prendrait 200 en cobol et tu n'as même pas besoin de compilation, tu peux exécuter directement le source. Malheureusement, si tu n'as pas ce langage dans ta société, c'est rapé. Quant à un scan de table, c'est tout simplement le fait de lire toutes les lignes d'une table sans passer par aucun index. 99% du temps, DB2 fait du séquentiel prefetch, cad qu'il anticipe les lectures avant même que tu les demandes. De plus, ce qui coute cher avec DB2, ce sont les I/O disques. Quand tu scannes une table complète, DB2 ramène la 1ère page et renvoie bien sur toutes les lignes de cette page. Donc, avec une I/O, DB2 peut ramener 100 lignes par exemple. Puis DB2 passe à la page suivante... Quitte à lire toutes les lignes d'une table, il est bien préférable de faire un bon scan de table une bonne fois pour toute, plutôt que de lire les lignes 1 par 1 au fur et à mesure des besoins. Les accès directs, dans un contexte batch, c'est la mort coté performances. A ta disposition. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com