|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 61 ![]() |
Bonjour à tous
une question qui me taraude ! je suis sur une base oracle 10.2.04, j'utilise le client sqldeveloper. je fais un simple cela prend des années avant de retourner un résultat ! pourtant ca doit juste lire le début de la table et afficher le résultat ! (la table fait environ 300 000 ligne sur 5 colonne) même quand je fais un cela rend la main très rapidement est ce que quelqu'un aurait une idée ! |
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
Cela vous lit votre table entierement, donc vous renvoie le maximum de données possibles, donc un flux important, donc lenteur !!
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
12
|
|
|
#3 | |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 61 ![]() |
Citation:
et au fur et à mesure que tu scrole il lit la suite |
|
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
Comment faites vous donc pour lire completement un table alors ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 61 ![]() |
si ta table fait 10 000 000 de ligne
un select * ne ramènera pas toutes les lignes en mémoire le select * s'affichera instantanément, il ramènera les première lignes ! |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Je ré itère donc ma question, comment faites vous pour selectionner TOUTES les lignes de votre table !
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
01
|
|
|
#7 |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 703 ![]() |
Bonjour,
Un count(*) peut utiliser un index de clé primaire, sans aller lire la table. Le select * va effectivement aller chercher que les premières lignes (en fonction du fetch size). Il peut y avoir plusieurs raisons pour lesquelles c'est plus long. Par exemple: une table qu'on remplit de bcp d'enregistrement, puis où on delete tous les enregistrements sauf les derniers. Alors, le full scan devra lire bcp de blocs vides avant de trouver les premiers enregistrements. Ou une table vidée par des delete mais remplie par des inserts en direct path. Cordialement, Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Ca dépend aussi du type des colonnes. Si tu as un blob alors là le select * va prendre beaucoup de temps.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Bonjour Pachot,
Citation:
Certes le client commence à récupérer des données mais il ne récupère pas la main avant d'atteindre la dernière ligne comme avec sqlplus par exemple. Par contre, le comportement décrit par cyclone_yas ressemble à celui de Toad qui effectivement pagine la requête automatiquement pour ne renvoyer que les 500 1eres lignes il me semble. Donc si rien ne se passe pendant longtemps avant d'obtenir les 1eres lignes ça ressemble effectivement à un problème de High Water Mark. |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 703 ![]() |
ici, il s'agit de sqldeveloper. Donc les lignes ne sont fetchées que pour les afficher. Si on ne scroole pas jusqu'en base, toutes les lignes ne sont pas lues.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Ah oui je n'avais pas vu que c'était SqlDeveloper mais je pense que ça ne change rien, à mon avis SqlDeveloper comme Toad réécrit la requête pour paginer et refetch les lignes au fur et à mesure du scroll, à mon avis rien à voir avec le fetch size.
[edit]OK il semble que le fetch size de SqlDeveloper correspond au nombre de lignes fetch par SqlDeveloper contrairement à l'array fetch size de sqlplus. Donc SqlDeveloper s'appuie bien sur le fetch size pour paginer la requête (mais on est d'accord, il s'agit bien de pagination ?) |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Donc ca n'a pas grand chose a voir avec SQL, mais devrait plutot etre posté dans la rubrique outil.
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
01
|
|
|
#13 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Son problème pourrait être un problème de HWM donc plus à voir avec Oracle qu'avec l'outil, par contre votre incompréhension du début avait tout à voir avec l'outil utlisé.
|
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 703 ![]() |
Citation:
Citation:
Ni TOAD ni SQLDeveloper ne réécrivent quoi que ce soit. Et oui ça a à voir avec le SQL et pas l'outil. En SQL on EXECute une requête en ouvrant un CURSEUR, puis on FETCH les enregistrements un par un ou plutôt par paquets. Et sous sqlplus, c'est pareil. Par défaut, ARRAYSIZE=15 donc on va chercher les lignes 15 par 15 et on est jamais obligés d'aller jusqu'au bout: 'set pause on' si on veut lire écran par écran et 'control-C' lorsqu'on en veut plus. Il n'existe pas d'appel qui va chercher tout les enregistrements d'un coup. Cordialement, Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
||
|
20
|
|
|
#15 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Ah ok, tu fais bien de polémiquer je ne connaissais pas set pause on et je pensais que Toad réécrivait les requêtes...
Donc j'ai bien fais de dire des bétises et tu as bien fait de polémiquer car j'en ai appris plus sur ces outils. Merci Pachot |
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 925 ![]() |
c'est toute la différence entre first_rows et all_rows
optimise le temps de réponse pour les 10 premières lignes optimise le temps de réponse pour la requête complète http://download.oracle.com/docs/cd/E...6.htm#BABGCCFG |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 61 ![]() |
1000 merci à tous
J'ai trouvé la cause, il ne s'agit pas d'une table, il s'agit d'une vue re-compilée à chaque fois elle est appelée dans une requête ! la personne ayant crée cet objet n'a pas respecté la syntaxe. par contre ce qui demeure incompréhensible c'est le pourquoi cette vue est re-compilée à chaque appel ? |
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 925 ![]() |
qu'est qui te fait dire qu'elle est recompilée?
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 61 ![]() |
C'est un collègue qui m'a expliqué qu'elle était re-compilée à chaque fois.
Supposition corroborée par le temps de réponse extrêmement lent. j'ai regardé dans la all_objects et la all_views mais rien ne semble indiquer cela ! le Last_ddl_time et le timestamp n'ont pas changé après requetage !? |
|
|
00
|
|
|
#20 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 925 ![]() |
ouais, ton collègue dit n'importe quoi, sans doute qu'il a googlé sur la mauvaise page
![]() même si elle était "recompilée", tu perdrais quelques dizièmes de secondes à tout casser ! essaye quand même avec mon "hint". |
|
00
|
Copyright © 2000-2012 - www.developpez.com