Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Connexion aux bases de données Firebird Discussion :

[JDBC][connexion persistante] performances avec JDBC


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre à l'essai
    [resolu][JDBC][connexion persistante] performances avec JDBC
    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...
    I can change the world, with my own two hands...

  2. #2
    Membre expert
    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....

  3. #3
    Membre à l'essai
    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' ???
    I can change the world, with my own two hands...

  4. #4
    Membre expert
    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)....

  5. #5
    Membre à l'essai
    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...) ???
    I can change the world, with my own two hands...

  6. #6
    Membre à l'essai
    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...) ???
    I can change the world, with my own two hands...

  7. #7
    Membre expert
    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.

###raw>template_hook.ano_emploi###