requêtes SQL n'aboutissant pas ! [Java-Jdbc] - Java - Programmation
Marsh Posté le 31-07-2002 à 09:38:52
el_gringo a écrit a écrit : voila ma situation, pour le moins emmerdante : Sur une plateforme de test dans ma boite, ma web-app fonctionne bien : je balance un select qui rend une dizaine de résultats, sur une table contenant en gros 15 000 enregistrements, ça me répond en, mettons 1/4 de secondes. Quand j'installe mon truc chez le client, ou la table ds laquelle je fais ce select contient en gros 100 millions d'enregistrements, cette même requête (qui là encore devrais rendre une diziaine d'enregistrements, SQL Plus à l'appuis) n'aboutis pas en 3 minutes (on atteind un timer). Qqn à une expliquation à ça ? (là, ça commence à craindre un peu pour moi !) |
15000 enregistrements -> 0.25 sec
3 minutes -> 10 800 000 enregistrements
(règle de trois powered )
Nan sérieusement, j'ai pas d'idée là.
Marsh Posté le 31-07-2002 à 09:42:22
bin c'est que tes accès ne sont pas optimisés ou que les champs qui sont utilisés pour la sélection ne sont pas indexés. Si tu ouvres SQLPlus ou autre, que tu tapes ta requete et qu'elle met 3 minutes c'est le SYSDBA qu'il faut taper, pas toi
Sinon c'est quoi cette histoire de Timer?
Marsh Posté le 31-07-2002 à 09:46:27
DarkLord a écrit a écrit : bin c'est que tes accès ne sont pas optimisés ou que les champs qui sont utilisés pour la sélection ne sont pas indexés. Si tu ouvres SQLPlus ou autre, que tu tapes ta requete et qu'elle met 3 minutes c'est le SYSDBA qu'il faut taper, pas toi Sinon c'est quoi cette histoire de Timer? |
Bah, non, ils sont indexés les champs, justement. sous SQL Plus, la requète abouti en une disaine de secondes.
Heu, le timer, c le proxy chez mon client : il bloque une requête ds elle dépasse les 3 minutes. Du coup mes requètes n'aboutissent jammais. Ms j'demandais ça, juste desfois que qqn aurait une idée. si ça s'trouve ça vient d'autre chose.
Marsh Posté le 31-07-2002 à 09:47:36
Quelle base
Quel driver
Comment construis tu ta requete
Pour SQLPlus tu te connectes avec le meme user/pwd et tu tapes exactement la meme requete ?
Marsh Posté le 31-07-2002 à 09:51:03
DarkLord a écrit a écrit : Quelle base Quel driver Comment construis tu ta requete Pour SQLPlus tu te connectes avec le meme user/pwd et tu tapes exactement la meme requete ? |
Driver :
Sur Oracle
Avant j'utilisais JdbcOdbc.
J'ai changé pour thin en éspérant que ça changerai qqch : pareil.
ma requète, c'est censé être la même, Disons que je crois que c la même ! (:D)
D'ici qqs heures, je saurais exactement la requête que Oracle à reçu (grâce aux DBA de la boite qui utilise ma servlet)
même user/password.
Marsh Posté le 31-07-2002 à 09:51:42
ouais bin vérifie déjà que c'est la meme alors ... Sinon ca sert à rien de spéculer pour rien
Marsh Posté le 31-07-2002 à 09:55:52
DarkLord a écrit a écrit : ouais bin vérifie déjà que c'est la meme alors ... Sinon ca sert à rien de spéculer pour rien |
Ouais, ms c'étais pr une question + précise en fait :
D'après toi, du moment que j'balance une requête SQL via Jdbc, les index sont forcément utilisés, non ? (j'imagine que la gestion des index, ça se fait niveau Oracle, et que ma pitite web-app n'a pas sont mot à dire la dessus !)
Marsh Posté le 31-07-2002 à 10:09:12
exactement. Par contre si tu utilise JdbcODBC la ca risque d'etre super lent
Thin est plus optimisé mais si ca change rien il doit y avoir un problème dans ta query ou la facon dont tu la crées.
Marsh Posté le 31-07-2002 à 10:16:35
DarkLord a écrit a écrit : exactement. Par contre si tu utilise JdbcODBC la ca risque d'etre super lent Thin est plus optimisé mais si ca change rien il doit y avoir un problème dans ta query ou la facon dont tu la crées. |
Bah, Odbc ça utilise les index aussi qd même...
Enfin, maintnant, ils utilisent thin, une bonne chose de fait. Par contre en fait, j'regardais, logiquement OCI, ça doit être plus performant, non ? vu que ça utilise des dll natives, alors que thin est pur Java...
la façon dont je cré ma query, elle est toute bête. j'concatène, j'concatène ...
En fait, ce topic ma fait penser que le bloquage doit se faire ailleur. Y me reste à trouver où !
Marsh Posté le 31-07-2002 à 10:37:19
t'as vérifié l'url(host, nom de base, etc) pour ta connexion?
Marsh Posté le 31-07-2002 à 10:54:14
--greg-- a écrit a écrit : tu utilises des prepared statements? |
...non !
dans ce cas là, t sur que c important ?
y me semblait que c'était dans le cas ou on fait le requète plein de fois, ms là, je fais ma requète qu'une seule fois.
Marsh Posté le 31-07-2002 à 10:55:03
--greg-- a écrit a écrit : t'as vérifié l'url(host, nom de base, etc) pour ta connexion? |
ouais, ms l'url est bonne.
J'accède à leur base de données. Je lis dans d'autres tables. c qd je fais des recherches sur cette table énorme que ça merde !
Marsh Posté le 31-07-2002 à 11:03:40
el_gringo a écrit a écrit : ...non ! dans ce cas là, t sur que c important ? y me semblait que c'était dans le cas ou on fait le requète plein de fois, ms là, je fais ma requète qu'une seule fois. |
ha non, non mais c juste qu'ici on a eu un prob avec des prepared statement qui utilisaient pas les index...
si tu as toad:
lance ta servlet
va dans toad ->tuning/sga trace optimization
tu choisis ton user, puis refresh, tu choisis la requete en question, puis tu regardes dans explain plan
Marsh Posté le 31-07-2002 à 11:22:56
--greg-- a écrit a écrit : si tu as toad: lance ta servlet va dans toad ->tuning/sga trace optimization tu choisis ton user, puis refresh, tu choisis la requete en question, puis tu regardes dans explain plan |
heu... g pas compris !
Marsh Posté le 31-07-2002 à 11:25:43
el_gringo a écrit a écrit : heu... g pas compris ! |
bah, tu as toad ou pas?
y'a ptet moyen de faire la mm chose avec les outils "par defaut" d'oracle mais ils suxxent des ours, j'ai meme pas envie d'essayer.
en gros tu peux voir avec ce bidule comment ont été executées les requetes qu'oracle à gardé dans son cache
Marsh Posté le 31-07-2002 à 11:37:16
--greg-- a écrit a écrit : bah, tu as toad ou pas? y'a ptet moyen de faire la mm chose avec les outils "par defaut" d'oracle mais ils suxxent des ours, j'ai meme pas envie d'essayer. en gros tu peux voir avec ce bidule comment ont été executées les requetes qu'oracle à gardé dans son cache |
Ha, ok
non, g pas ça.
Et puis je suis pas chez les client. ça me parait délicat de leur demander d'utiliser ça !
merci qd même.
Marsh Posté le 31-07-2002 à 11:38:16
el_gringo a écrit a écrit : Ha, ok non, g pas ça. Et puis je suis pas chez les client. ça me parait délicat de leur demander d'utiliser ça ! merci qd même. |
ben choppe toi free toad, regarde comme ça marche, retourne chez ton client et mate comment ça se passe...
ou bien prend une copie de leur db chez toi
Marsh Posté le 31-07-2002 à 11:42:25
--greg-- a écrit a écrit : ben choppe toi free toad, regarde comme ça marche, retourne chez ton client et mate comment ça se passe... ou bien prend une copie de leur db chez toi |
Pour l'instant, c pas prévu que j'aille chez eux.
Prendre une copie de leur bd, en voila une idée qu'elle est bonne.
Vite, je branche mon modem 56K, et je lance le transfer. Je reviens dans un petit millénaire voir si c terminé !
Marsh Posté le 31-07-2002 à 12:12:19
el_gringo a écrit a écrit : Pour l'instant, c pas prévu que j'aille chez eux. Prendre une copie de leur bd, en voila une idée qu'elle est bonne. Vite, je branche mon modem 56K, et je lance le transfer. Je reviens dans un petit millénaire voir si c terminé ! |
ben mon pauvre, travailler dans ces conditions...
Marsh Posté le 31-07-2002 à 12:14:04
--greg-- a écrit a écrit : ben mon pauvre, travailler dans ces conditions... |
non, j'déconne, g pas de modem, ms même avec l'ADSL, c comlpètement inenvisageable que je récupère les 100 millions d'enregistrements qu'ils ont dans leurs table !
Marsh Posté le 31-07-2002 à 12:16:40
el_gringo a écrit a écrit : non, j'déconne, g pas de modem, ms même avec l'ADSL, c comlpètement inenvisageable que je récupère les 100 millions d'enregistrements qu'ils ont dans leurs table ! |
et les cdrom tu connais pas?
Marsh Posté le 31-07-2002 à 12:26:13
y en a qd meme qui me font rire. Récemment un gars me demandait de l'aide pour une applet qui lis des vidéos en streaming et:
- Il a un firewall qui l'empeche de faire des tests avec de serveurs de stream public (genre TF1 ou autre)
- Son boss ne veut pas installer un server de stream dans l'intranet parce que c'est chiant.
Faut pas déconner qd meme ...
Marsh Posté le 31-07-2002 à 12:29:51
--greg-- a écrit a écrit : et les cdrom tu connais pas? |
non, ms g l'impression que tu te rends pas bien compte de ce que c'est que 300 millions d'enregistrements (tt à l'heure je disais 100, ms c parce que ça n'avait pas vraiement d'importance). tu crois que ça tient sur 3 cd's ?
ils leur faut des disaines de disques optiques numériques pour stocker tout ça. plusieurs TerraOctets j'imagine, et tu crois que j'vais graver ça sur CD !? non, ms 'faut rester sérieux un peu !
Marsh Posté le 31-07-2002 à 12:37:58
el_gringo a écrit a écrit : non, ms g l'impression que tu te rends pas bien compte de ce que c'est que 300 millions d'enregistrements (tt à l'heure je disais 100, ms c parce que ça n'avait pas vraiement d'importance). tu crois que ça tient sur 3 cd's ? ils leur faut des disaines de disques optiques numériques pour stocker tout ça. plusieurs TerraOctets j'imagine, et tu crois que j'vais graver ça sur CD !? non, ms 'faut rester sérieux un peu ! |
et toi tu crois que tu vas debugger ton appli qui fonctionne pas sur leur bd de merde, à distance, sans copie de la bd ni accès à cette db depuis ton poste!? non, ms 'faut rester sérieux un peu !
Marsh Posté le 31-07-2002 à 12:46:17
--greg-- a écrit a écrit : et toi tu crois que tu vas debugger ton appli qui fonctionne pas sur leur bd de merde, à distance, sans copie de la bd ni accès à cette db depuis ton poste!? non, ms 'faut rester sérieux un peu ! |
gringo je confirme que t'es lourd!
Marsh Posté le 31-07-2002 à 12:47:16
--greg-- a écrit a écrit : et toi tu crois que tu vas debugger ton appli qui fonctionne pas sur leur bd de merde, à distance, sans copie de la bd ni accès à cette db depuis ton poste!? non, ms 'faut rester sérieux un peu ! |
d!ailleurs tu fais comment pour tester?
Marsh Posté le 31-07-2002 à 12:47:22
DarkLord a écrit a écrit : gringo je confirme que t'es lourd! |
g pas dit ça moi:ange:
Marsh Posté le 31-07-2002 à 13:58:31
Mais putain, je fais comme je peux, vous m'faites chier !
J'demande si vous avez pas une idée. J'vous demande pas de me dire comment j'doit bosser. C qd même possible de trouver d'ou vient un bug, sans pouvoir le reproduire. ça m'est arrivé un paquet de fois. Desfois y suffit de réfléchir,ou que qqn ai une idée. D'ou mon post.
Pour l'instant j'essaye de trouver d'ici. Si j'y arrive pas, je rajouterai un log à ma servlet, et je ferai installer ça au client, ou je me déplacerai...
Merci...
Marsh Posté le 31-07-2002 à 14:02:05
Qui fait chier l'autre franchement gringo?
Moi je trouve que tu nous prends particulièrement pour des cons. Tu débarques avec un problème sur lequel on se penche et on prends sur notre temps personnel (et bénévole je le rappelle) pour finalement apprendre que :
- Tu ne sais pas si c'est la meme query
- Que tu n'as pas accès à la DB qui te pose problème
- Que tu n'es meme pas sur le site.
Je te signale que j'essaie de répondre à tout ce que je peux sur ce forum alors gardes tes insultes pour toi, t'es lourd un point c'est tout. Et ca c'est pas une insulte, c'est une réalité
sur ce bye
Marsh Posté le 31-07-2002 à 14:09:09
DarkLord a écrit a écrit : Qui fait chier l'autre franchement gringo? Moi je trouve que tu nous prends particulièrement pour des cons. Tu débarques avec un problème sur lequel on se penche et on prends sur notre temps personnel (et bénévole je le rappelle) pour finalement apprendre que : - Tu ne sais pas si c'est la meme query - Que tu n'as pas accès à la DB qui te pose problème - Que tu n'es meme pas sur le site. Je te signale que j'essaie de répondre à tout ce que je peux sur ce forum alors gardes tes insultes pour toi, t'es lourd un point c'est tout. Et ca c'est pas une insulte, c'est une réalité sur ce bye |
Marsh Posté le 31-07-2002 à 14:12:12
j'en sais rien gringo. En tout cas tout ca nous détourne du sujet initial qui est un des problèmes que j'ai aussi actuellement. Je dirai que si ca va bien avec 15.000 enregistrements et que ca merde avec plus de données, tu ne dois pas aller voir dans ton code (sauf la requete SQL).
Faut voir la config de la BD (y a t il les memes index en dev qu'en prod).
Et puis passez de 15.000 à 3000000 c'est pas rien qd meme. et le nombre d'enregistrements retourné (que ce soit 1 ou 50) n'as pas grand chose à voir là dedans je pense. C'est plutot le volume de la base et sa config.
Donc téléphone au SYSDBA de la boite, que veux tu que je te dises d'autre.
Marsh Posté le 31-07-2002 à 14:20:45
DarkLord a écrit a écrit : j'en sais rien gringo. En tout cas tout ca nous détourne du sujet initial qui est un des problèmes que j'ai aussi actuellement. Je dirai que si ca va bien avec 15.000 enregistrements et que ca merde avec plus de données, tu ne dois pas aller voir dans ton code (sauf la requete SQL). Faut voir la config de la BD (y a t il les memes index en dev qu'en prod). Et puis passez de 15.000 à 3000000 c'est pas rien qd meme. et le nombre d'enregistrements retourné (que ce soit 1 ou 50) n'as pas grand chose à voir là dedans je pense. C'est plutot le volume de la base et sa config. Donc téléphone au SYSDBA de la boite, que veux tu que je te dises d'autre. |
...rien !
D'ailleur j'attend plus grand chose de ce topic depuis que t'as répondu à ma question sur la gestion des index de base de données. (et je t'en remercie à nouveau)
Le nombre d'enregistrement retourné, j'pense que ça a une importance qd même. Parce que, si ma requète devait retourner 1 000 000 d'enregistrements, j'comprendrais qu'elle soit un peu longue !
Marsh Posté le 31-07-2002 à 14:24:48
ouais ne jouons pas avec les mots hein
Marsh Posté le 31-07-2002 à 09:13:00
voila ma situation, pour le moins emmerdante :
Sur une plateforme de test dans ma boite, ma web-app fonctionne bien :
je balance un select qui rend une dizaine de résultats, sur une table contenant en gros 15 000 enregistrements, ça me répond en, mettons 1/4 de secondes.
Quand j'installe mon truc chez le client, ou la table ds laquelle je fais ce select contient en gros 100 millions d'enregistrements, cette même requête (qui là encore devrais rendre une diziaine d'enregistrements, SQL Plus à l'appuis) n'aboutis pas en 3 minutes (on atteind un timer). Qqn à une expliquation à ça ? (là, ça commence à craindre un peu pour moi !)