|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Bonjour,
Je travaille sous Talend Open Studio version 4.1.2 avec une base de données Oracle 10g. J'effectue un job qui me permet dans un premier temps de récupérer tous les différents libellés de garantie présents sur une base client. A part de cet ensemble de libellés, je créé dynamiquement une requête que j’exécute ensuite. Ma requête à la forme suivante : Code :
Code :
Le problème est qu'à l'exécution, le job bloque un moment sur le tOracleInput, et après un peu plus de 5h d'exécution, me pose l'erreur suivante : ORA-01652: impossible d'étendre le segment temporaire de 128 dans le tablespace TEMP Seulement dans ma base, j'ai sur TEMP, deux filename, sur deux disques différents, chacun faisant 32 Gb, en auto extend avec un next extend de 640 Kb ainsi qu'un max size/max blocks unlimited. Si dans ma requête je place un "and rownum < 200" Cela fonctionne, le problème doit donc vraiment venir de la mise en mémoire par le tOracleInput, non? Comment je pourrai faire pour augmenter ce tablespace, sachant que je pensais déjà l'avoir fait mais apparemment ça ne fonctionne pas... Merci pour votre aide. Merci pour votre aide. |
||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Le temp est utilisé pour les tris (order by, group by).
Es-tu sur que ta requête est correcte, c'est à dire pas de merge join cartesien ? Elle me gêne un peu. Pourquoi faire un group by dans la sous requête, alors qu'il n'y a aucune fonction de groupement (max, count, sum, etc..) ? Généralement, ça cache un problème soit de requête soit de modèle de données. Dernière chose : Je n'arrive pas à comprendre le decode sur les libellés. La concaténation n'est pas une focntion de groupe. Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#3 | |
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Bonjour,
Je pense que oui ma requête est correcte, comme elle s'exécute sans erreur lorsque j'ai moins de ligne (and rownum < 200). Je l'avais aussi faite tourner sous TOAD for Oracle avec un select count (distinct pol_numpol) afin de savoir combien de ligne elle retournait et cela avait fonctionné. Le problème pourrait alors venir du group by ou du order by qui sont à la fin? Citation:
|
|
|
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
des decodes concaténés ne sont pas des fonctions de groupe. Tu ne peux pas regrouper des lignes dans une seule colonne avec des concaténations.
Code :
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||||
|
|
00
|
|
|
#5 | ||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Bonjour,
pourriez vous faire ceci Code :
Postez aussi le résultat de la requête suivante Bien Cordialement Mohamed Houri |
||
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Explain complete.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3045687361
--------------------------------------------------------------------------------
-----------------------------------------
| Id | Operation | Name | Rows
| Bytes |TempSpc| Cost (%CPU)| Time |
--------------------------------------------------------------------------------
-----------------------------------------
| 0 | SELECT STATEMENT | | 9629M
| 986G| | 1441M (1)|999:59:59 |
| 1 | SORT ORDER BY | | 9629M
| 986G| 2825G| 1441M (1)|999:59:59 |
| 2 | HASH GROUP BY | | 9629M
| 986G| 2825G| 1441M (1)|999:59:59 |
| 3 | VIEW | | 9629M
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 986G| | 795M (1)|999:59:59 |
| 4 | HASH GROUP BY | | 9629M
| 2546G| 5441G| 795M (1)|999:59:59 |
|* 5 | HASH JOIN RIGHT OUTER | | 9629M
| 2546G| | 643K (21)| 02:08:40 |
| 6 | TABLE ACCESS FULL | T_CDECPT | 183
| 6405 | | 2 (0)| 00:00:01 |
|* 7 | HASH JOIN RIGHT OUTER | | 9629M
| 2233G| | 581K (12)| 01:56:19 |
| 8 | TABLE ACCESS FULL | F_TARIF_GAR | 2258
| 20322 | | 22 (0)| 00:00:01 |
|* 9 | HASH JOIN RIGHT OUTER | | 379M
| 84G| | 519K (2)| 01:43:57 |
| 10 | TABLE ACCESS FULL | T_INTERCALAIRE | 89
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 890 | | 3 (0)| 00:00:01 |
|* 11 | HASH JOIN RIGHT OUTER | | 379M
| 81G| | 517K (2)| 01:43:28 |
| 12 | TABLE ACCESS FULL | F_TARIF_ASS | 100
| 1200 | | 2 (0)| 00:00:01 |
|* 13 | HASH JOIN RIGHT OUTER | | 37M
| 7890M| | 514K (1)| 01:42:58 |
| 14 | TABLE ACCESS FULL | F_PRD_RISQUE | 91
| 728 | | 2 (0)| 00:00:01 |
|* 15 | HASH JOIN RIGHT OUTER | | 12M
| 2505M| | 514K (1)| 01:42:55 |
| 16 | TABLE ACCESS FULL | T_SIT_MARITALE | 6
| 78 | | 3 (0)| 00:00:01 |
|* 17 | HASH JOIN RIGHT OUTER | | 12M
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 2350M| 2112K| 514K (1)| 01:42:54 |
| 18 | TABLE ACCESS FULL | F_P_PERSONNE | 63393
| 1361K| | 582 (2)| 00:00:07 |
|* 19 | HASH JOIN RIGHT OUTER | | 12M
| 2088M| 7216K| 403K (1)| 01:20:37 |
| 20 | TABLE ACCESS FULL | F_VERSION_POLICE | 210K
| 4737K| | 1171 (2)| 00:00:15 |
|* 21 | HASH JOIN RIGHT OUTER | | 12M
| 1807M| 14M| 304K (1)| 01:00:56 |
| 22 | TABLE ACCESS FULL | F_MOUVEMENT | 631K
| 7400K| | 3217 (1)| 00:00:39 |
|* 23 | HASH JOIN RIGHT OUTER | | 11M
| 1534M| | 217K (1)| 00:43:36 |
| 24 | TABLE ACCESS FULL | F_PRODUITASS | 30
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 210 | | 2 (0)| 00:00:01 |
| 25 | NESTED LOOPS OUTER | | 11M
| 1457M| | 217K (1)| 00:43:35 |
|* 26 | FILTER | |
| | | | |
|* 27 | HASH JOIN RIGHT OUTER | | 11M
| 1227M| 1912K| 217K (1)| 00:43:35 |
| 28 | TABLE ACCESS FULL | F_POLICES | 42459
| 1409K| | 846 (1)| 00:00:11 |
|* 29 | HASH JOIN RIGHT OUTER | | 11M
| 854M| 1168K| 167K (2)| 00:33:35 |
| 30 | TABLE ACCESS FULL | F_P_C_ASSURE | 49733
| 582K| | 98 (2)| 00:00:02 |
|* 31 | HASH JOIN RIGHT OUTER | | 11M
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| 719M| 13M| 125K (2)| 00:25:05 |
| 32 | TABLE ACCESS FULL | F_SIT_ASSURE | 573K
| 6715K| | 3282 (1)| 00:00:40 |
|* 33 | HASH JOIN RIGHT OUTER | | 11M
| 588M| 31M| 85608 (2)| 00:17:08 |
| 34 | TABLE ACCESS FULL | F_SIT_OBJET_RISQUE | 585K
| 25M| | 3326 (2)| 00:00:40 |
| 35 | TABLE ACCESS FULL | F_GARANTIE_DYN | 11M
| 97M| | 69254 (2)| 00:13:52 |
| 36 | TABLE ACCESS BY INDEX ROWID| F_INTERMEDIAIRE | 1
| 21 | | 1 (0)| 00:00:01 |
|* 37 | INDEX UNIQUE SCAN | PK_IN_IDENT | 1
| | | 0 (0)| 00:00:01 |
--------------------------------------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access("TGA_CODE_COMPTA"="CCP_CODE"(+))
7 - access("TA_CLE"="TGA_CLETARIF"(+))
9 - access("TAS_CODEINTERCALAIRE"="TA_CODE"(+))
11 - access("SOR_DATETARIF"="TAS_DATEFFET"(+))
13 - access("PAS_IDENT"="PRI_PTRPASIDENT"(+))
15 - access("BPP_PTRMARID"="MAR_IDENT"(+))
17 - access("BPASS_PTRBPPIDENT"="BPP_IDENT"(+))
19 - access("MVT_PTRVERID"="VER_IDENT"(+))
21 - access("SOR_IDENT"="MVT_PTRSUIVANTID"(+))
23 - access("POL_PTRPASID"="PAS_IDENT"(+))
26 - filter("POL_DATRESIL" IS NULL OR "POL_DATRESIL">=SYSDATE@!-INTERVAL'+0000
00003-00' YEAR(9) TO MONTH)
27 - access("SOR_PTRPOLID"="POL_IDENT"(+))
29 - access("SAR_PTRASSID"="BPASS_IDENT"(+))
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
31 - access("SOR_IDENT"="SAR_PTRSORID"(+))
33 - access("GAD_PTRSORID"="SOR_IDENT"(+))
37 - access("POL_PTRINID"="IN_IDENT"(+))
64 rows selected.
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 64-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
5 rows selected. |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Merci,
L'explain plan que vous avez posté est inexploitable à cause de l'indentation qui a été mal ajustée Pourriez-vous s'il vous plaît refaire la même chose mais cette fois ci précédée de Ceci permettra de bien ajuster l'indentation Bien Cordialement Mohamed Houri |
|
|
00
|
|
|
#8 | |||
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Mcm, en effet dans mon cas je n'ai pas qu'une seule ligne dans ma clause GROUP BY. Mais sur des petites quantités de données cela fonctionne quand même... Comment ça se fait?
J'ai modifié ma requête ainsi : Code :
Citation:
Parce qu'encore une fois, sur une petite quantité de données, cela fonctionne... |
|||
|
|
00
|
|
|
#9 | |
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Explain complete.
Citation:
|
|
|
|
00
|
|
|
#10 | ||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Bon, j'ai formatté l'explain plan pour vous
Code :
Si par contre, le nombre est inexacte, alors soit les statistiques ne sont pas à jour ou soit votre requête n'est pas celle que vous esperez avoir écrite. De plus, les deux premières opérations faites par votre requête sont Code :
Je ne peux même pas savoir si vraiment il y a absence de prédicate pour ces deux tables ou pas car vous n'avez pas mis des alias pour les tables afin de faire correspondre chaque where clause à sa table correspondante. Vous devriez commencer par faire des alias à vos tables et aux champs que vous sélectionnez Bien Cordialement Mohamed Houri PS : à quelle table appartient le champ POL_DATRESIL? |
||||
|
|
10
|
|
|
#11 | |||||
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Citation:
Citation:
Quand vous dites des alias, c'est par exemple : Code :
Citation:
Je vais réexécuter ce traitement en mettant donc des alias. |
|||||
|
|
00
|
|
|
#12 | |
|
Candidat au titre de Membre du Club
![]() Justine Dreyfus Inscription : juin 2010 Messages : 109 ![]() |
Voici le nouvel EXPLAIN avec les alias. Veuillez m'excuser pour la mise en forme...
Explain complete. Citation:
|
|
|
|
00
|
|
|
#13 | ||||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Desolé, le nouvel explain plan n'est pas exploitable tel que vous l'avez posté.
Pour répondre à vos questions (a) les alias sont des abreviations que l'on donne à une table afin de pouvoir identifier, dans les selects compliqués incluant plusieurs tables, la provenance de la colonne sélectionnée. Par exemple, dans la requête suivante: Code :
(b) Ce que j'appelle le prédicate n'est autre que la clause suivante Cette clause est reprise à la fin de l'explain plan et sert très souvent à diagnostiquer des problèmes de performances comme des conversions implicites empechant l'utilisation des indexes. Dans votre cas, vous voyez bien que lorsque vous ne sélectionnez que 99 lignes, vos opérations de tri ne nécessittent pas beaucoup d'espace TEMP Code :
Code :
Bien Cordialement Mohamed Houri |
||||||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com