|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() |
Bonjour à tous,
J'ai remplacé il y a peu ma base de données MySQL par une base Interbase, pour une appli JAVA (accès JDBC pr les deux). Le problème, c'est que là ou mysql 'mangeais' 10 pages de sql en 10secondes, avec Interbase, c'est plutôt 10 pages pour 10 jours... Ce qu'il se passe, c'est que j'envoyer des instructions SQL par gros paquets (1 'create' et 300 000 'insert' derrière, en l'occurence) Y-a-t-il des moyens de connexion qui me permettraient d'améliorer ses perfs (plutôt minables vis-à-vis de mysql) ??? J'imagine que ça ne sera jamais plus rapide qu'avec mysql, vu que ça passe par une appli intermédiaire (interserver), mais bon, je m'en remet à vous... |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Bon je me lance mais je ne te promet rien.......
MySQL est une base assez lite : quand je dit lite ca veux dire qu'il lui manque plein de truc pour être un vrai SGBD. Mais cet incovéniant est heureusement (et c'était le but à la base...) comblé par une simplicité d'utilisation et des performances en terme de vitesse tres interressantes... Bon notamment MySQL n'a par exemple pas du tout la notion de transaction. .... ne t'impatiente pas voilà ou je veux en venir.... Interbase est un SGBD transactionnel donc quoi que tu fasses est forcément dans une transaction... Pour rappel une transaction sous Interbase c'est comme si tu prennais à un instant T (le debut de la transaction) une photo de ta base...tu peux lire, ecrire, insérer dans cette photo et tout ca ne prendra effet que lorsque tu validera ta transaction (Commit ou CommitRetaining) mais tu peux annuler également toutes les modifications que tu a faites depuis le début de ta transaction (RollBack, ou RollBackRetaining). Bon comment fait il ??? en simplifiant ... Interbase va se gérer une log dans lequel il va mettre toutes les modifs que tu lui as demandé. Si tu fait un commit il Ecrit réellement ces modif... Donc voilà ce qui explique peut être pourquoi 300000 insert peuvent mettre un peut de temps à s'exécuter lors du commit.... Si ca vient bien de là il y a deux solutions : 1-Modifier le paramètrage d'Interbase pour qu'il utilise un maximum la RAM à la place du disque.. 2-Sinon je te suggère dans ta boucle des 300000 insert de faire des CommitRetaining (tous les 100 ou 1000 par exemple). Voilà c'est ce que j'essayerai de faire mais je ne te garantie rien.... |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() |
Merci, ça me donne de l'inspiration pour continuer, mais ça me fait aussi penser que je ne donne jamais de commit, par JDBC, et ma base se génère qd même ! !
PS : Ca fait quoi exactement 'CommitRetaining', par rapport à un simple 'commit' ??? |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
En fait par defaut (sur fermeture) tu as un Commit. Ce qui explique pourquoi tu n'as jamais eut besoin d'en faire.
Commit; Valide la transaction et la ferme (donc ca ferme ton accés... tu es obligé de la réouvrir (ce qui provoque un BeginTransaction)). CommintRetaining va valider les modifications mais ne vas pas fermer la transaction (donc tu peux continuer à travailler dedans).... |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() |
GENIAL ! !
Maintenant, j'ouvre ma connexion au lancement de mon appli, et je ferme quand je quitte : c'est ultra rapide ! Merci beaucoup Barbibulle, vraiment. Par contre, j'ai une question, plus à titre préventif qu'autre chose : ma connexion distante n'a pas de durée de vie limitée ?? Si je ne fais pas de connexion pendant un certain laps de temp, elle ne risque pas de se fermer toute seule (j'ai cherché, impossible de trouver de la doc là-dessu...) ??? |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() |
GENIAL ! !
Maintenant, j'ouvre ma connexion au lancement de mon appli, et je ferme quand je quitte : c'est ultra rapide ! Merci beaucoup Barbibulle, vraiment. Par contre, j'ai une question, plus à titre préventif qu'autre chose : ma connexion distante n'a pas de durée de vie limitée ?? Si je ne fais pas de connexion pendant un certain laps de temp, elle ne risque pas de se fermer toute seule (j'ai cherché, impossible de trouver de la doc là-dessus...) ??? |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Contant que tu ais réussi à t en sortir.
Pour le temps de connexion : C'est une bonne question, mais il ne me semble pas qu'il y ait de limite dans le temps de ta connexion... Peux tu mettre le tag [Résolu] dans le titre merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com