|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||||
|
Membre régulier
![]() Développeur informatique Inscription : février 2005 Messages : 269 ![]() |
bonjour,
voila plus jour que je galère sur l'impossibilité de me débarrasserd'un "TABLE ACCESS FULL" !! J'ai une table comme suit les documents XML font ~30ko. Code :
Code :
par contre comment peut on optimiser cette requete : Code :
SELECT extract(object_value,'/xyzmessage').getClobVal() FROM XYZREGISTRE WHERE existsNode(object_value,'/xyzmessage[NOID="x007tzg4263') = 1; Code :
Code :
note :: le .getClobVal() est OBLIGATOIRE. merci de votre aide !!
__________________
Citation:
|
|||||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Et pour quoi veut tu te débarrasser du FULL ? Les résultats n’ont pas l’air d’indiquer un souci de performance ?
|
|
|
00
|
|
|
#3 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
j'y connais pas grand chose (en fait rien
) mais d'après l'exemple de la doc j'ai pas l'impression que l'index porte sur la même chose que la requête. Je me serais attendu à un WHERE du genre : Code :
object_value,'/xyzmessage[META_DATA="x007tzg4263'
![]() Sinon, sache qu'il n'est pas forcément intéressant de passer par un index, si Oracle ramène beaucoup de ligne (par rapport au nombre de référence dans l'index) un FTS est plus intéressant |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
cet exemple à l'air intéressant aussi : http://download.oracle.com/docs/cd/B...tm#sthref10107
tu peux essayer un index comme ça ? Code :
CREATE INDEX idx_xyzreg_1 ON XYZREGISTRE (XMLDATA."NOID") |
|
|
00
|
|
|
#5 | |||||
|
Membre régulier
![]() Développeur informatique Inscription : février 2005 Messages : 269 ![]() |
en fait j'ai tourné le problème un peu dans tous les sens.
en effet il n'y a pas problème de perf - pour le moment - c'est une base de dev. J'ai fait des test d'accès à 100, 1000, 10000 lignes ça fonctionne avec des temps d'accès <3sec... mais pour plus tard... Les temps données par explain plan sont un peu faussé lorsque la requête a déjà été exécuté... en ce qui concerne le fait d'utiliser "WHERE extractValu"e au lieu de "/xpath[param=value] "; j'ai remarqué que c'était moins couteux en E/S pour oracle - Maintenant savoir pourquoi ?- la ou cela me pose problème. c'est que Oracle n'utilise pas les index que j'ai mis en place. Autre exemple : quand je fait un Code :
Code :
De plus je n'arrive pas a forcer l'usage des index même avec /*index()*/ dans la requete !! une idée...
__________________
Citation:
|
|||||
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Si t’a pas un problème de perf ne t’invente pas un problème d’optimisation !
Si tu penses que les gros volumes vont poser des problèmes fais un benchmark et vérifiez. Si tu veut obtenir les informations concernant les choix de l’optimiseur fait une trace de l’événement 10053, mais comprendre et interpréter les résultats n’est pas simple. Il y a « N » raisons pour expliquer pourquoi Oracle n’utilise un index. Citation:
si tu pense que ça aide. |
|
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
si je vois bien tu utilises le parallélisme ce qui peut expliquer l'usage des FTS
|
|
|
00
|
|
|
#8 | |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
Pourquoi ne pas faire
__________________
Consultant et formateur Oracle |
|
|
|
00
|
|
|
#9 | ||
|
Membre régulier
![]() Développeur informatique Inscription : février 2005 Messages : 269 ![]() |
Citation:
la tout va bien par contre TABLE ACCESS FULL !! je me suis dit que si je trouve rapidement le rowid, ramener toutes les informations de ce rowid serai une facon d'aider oracle à trouver l'information sans tout scanner.... mais malheureusement TABLE ACCESS FULL !! too. bizard... vous avez dis bizard pour répondre à "orafrance" : j'ignorai que le parallélisme imposait le FTS... je vais fouiller dans cette direction. merci pour l'info
__________________
Citation:
|
||
|
|
00
|
|
|
#10 | |
|
Membre régulier
![]() Développeur informatique Inscription : février 2005 Messages : 269 ![]() |
Bingo !!
c'était bien le parallélisme qui provoquai le non-usage des index !! si quelqu'un a de ma littérature sur le sujet;je suis preneur. Merci encore. SOLVED
__________________
Citation:
|
|
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
qui dit parallélisme dit FTS moins couteux pour l'optimiseur donc le CBO rechigne moins à y recourir
c'est pas automatique mais ça risque d'arriver plus souvent... encore une démonstration que le parallélisme est loin d'être toujours miraculeux |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com