IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

interbase et firebird


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut interbase et firebird
    j'ai réalisé une petite appli (Delphi 5) qui execute des insert et des delete dans une base de données (requetes placees dans des IBDataSet) sql afin de mesurer le comportement à long terme avec plusieurs milliers de transactions.

    Je fais tourner sur une machine avec XPPro et FireBird 1.5.2 et à plusieurs reprises le programme s'arrête tout seul au bout d'environ 6000 insert/delete sans message d'erreur ni plantage. Comme les transactions sont placées dans l'evenement OnInterval d'un timer, il n'y a aucune raison que le prog s'arrête tout seul.

    Je fais tourner sur Win2K avec Interbase 6.0.2, le programme ne s'arrete pas.

    Il y a donc 2 causes possibles : le moteur de BD ou l'OS. Votre avis ?

  2. #2
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut Re: interbase et firebird
    Citation Envoyé par frantzgac
    Votre avis ?
    Et on gagne quoi ?

    Sérieusement, si c'est le serveur de la base de données, le log devrait t'en informer.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut
    Justement le log reste coi. J'ai ajouté un fichier ini qui reçoit des infos au fur et à mesure, je vous tiens au courant puisque ça vous intéresse

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut
    En fait le programme s'arrete aussi sous Win 2K avec IB 6.0.2 au bout de presque 3 heures et presque 100000 transactions. Aucune trace dans le log.
    A suivre...

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    ta boucle en delphi??? comment fais-tu? c'est possible de voir le code compris entres le "while" et le "end"

    je pense que tu recrée une nouvelle instance de connexion ou du composant query à chaque tour et à défaut de mémoire, il arrive un moment ou il n'est plus possible de créer une nouvelle instance de quoi que ce soit.

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    procedure TForm1.Timer1Timer(Sender: TObject);
    var i:integer;
    begin
    if not IBTable1.active then exit;
    i:=random(range);
    with ibdataset1 do begin
         Selectsql.clear;
         selectsql.Add(format('select * from %s where ENTIER1=%d',[IBTable1.TableName,i]));
         Open;
         last;
         if recordcount>0 then begin
            close;
            selectsql.clear;
            selectsql.Add(format('delete from %s where ENTIER1=%d',[IBTable1.TableName,i]));
            open;
            close;
            inc(DeleteCount);
            end
         else begin
             close;
             selectsql.clear;
             selectsql.Add(format('insert into %s (ENTIER1, ENTIER2) values (%d,%d)',[IBTable1.TableName,i,random(range)]));
             open;
             close;
             inc(insertcount);
             end;
         end;
    Synchronize;
    end;

    En fait ce n'est pas un while mais l'évenement OnTimer qui est exploité.
    dans la procédure Synchronize je fais un select * from table suivi de last avec le même ibdataset pour récupérer le recordcount. Je sais j'aurais pu faire select count(*) mais comme c'est un prog de test le temps qu'il passe n'a pas d'importance. (le range du random est 1000, la table tourne à 500 enregistrements environ).

    Précision sur les derniers tests

    Test1 43552 insertions et 43550 suppressions durée 2.25
    Test2 39414 insertions et 39438 suppressions durée 2:12
    Test3 43645 insertions et 43668 suppressions durée 2:26

    Je remarque qu'on frole toujours les 100000 requetes... Serait-ce une limite paramètrable ?

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut +
    J'ajoute que je surveille la mémoire dispo avec le gestionnaire de tâches et qu'elle ne bouge pas. Donc pas d'allocation de ressources non restituées.

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Euh, en marge du pb (?):

    Pour des requètes de modification de la base, c'est pas ExecSQL qu'il faut appeler ?

    Tu ne commites jamais ?

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    Ne pas fermer les transactions provoque le versionning des enregistrements, ce qui t'arrive me semble normal, puisque les enregistrements sont probablement dupliqués par interbase à l'infini.

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut
    Il y a du nouveau. J'ai ajouté un open/close périodique sur un composant IBTable associé à la même table et là le problème disparait.

    Il est probable en effet qu'il y a de la journalisation excessive, mais anormal que cela se traduise par un arrêt du programme sans commentaire non ?

    Le fait d'utiliser un TIBQuery et ExecSQL plutot qu'un IBDataset changerait il quelque chose ? Je verrais si j'ai le temps de tester ...

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par frantzgac
    Il y a du nouveau. J'ai ajouté un open/close périodique sur un composant IBTable associé à la même table et là le problème disparait.
    Mon intuition me dit que tu as deux transactions, une pour le TIBTable et l'autre pour le Dataset. On peut voir le dfm en + ?

    Citation Envoyé par frantzgac
    Il est probable en effet qu'il y a de la journalisation excessive, mais anormal que cela se traduise par un arrêt du programme sans commentaire non ?
    Ca n'est pas normal en effet, je pense qu'un mail sur une liste de diffusion Firebird serait utile.

    Citation Envoyé par frantzgac
    Le fait d'utiliser un TIBQuery et ExecSQL plutot qu'un IBDataset changerait il quelque chose ? Je verrais si j'ai le temps de tester ...
    Non, ca ne changera rien dans ton cas.

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    485
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 485
    Points : 269
    Points
    269
    Par défaut
    fin du feuilleton :

    j'ai remplacé le IBDataset par un TIBQuery avec ExecSQL, j'ai retiré le open close avec IBTable, et le problème disparait.

    Cela semble indiquer que le traitement des requetes par TIBDataset et TIbQuery n'est pas le même. Je dirais que TIBQuery clos la transaction tandis que TIBDataser la laisse durer ?

    Pour ceux que ça interesse je place tout le paquet ici

    http://frantzgacogne.free.fr/ftp/testfirebird.zip

    pour faire réapparaitre le pb, remplacer TIBQuery par TIBDataset et SQL par SelectSQL

Discussions similaires

  1. JvUIBBackup, Interbase et Firebird
    Par Harry dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/07/2005, 15h04
  2. Caractéristique Interbase et firebird
    Par AlexB59 dans le forum InterBase
    Réponses: 2
    Dernier message: 11/06/2005, 01h03
  3. Limitations de Interbase ou Firebird ?
    Par laffreuxthomas dans le forum InterBase
    Réponses: 3
    Dernier message: 05/04/2005, 12h52
  4. Taille des fichiers Interbase et Firebird
    Par Equus dans le forum Débuter
    Réponses: 5
    Dernier message: 21/03/2005, 15h50
  5. D'interbase 6 à Firebird, quels différences
    Par Harry dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/09/2004, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo