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

Firebird Discussion :

Base de données qui plante de temps en temps


Sujet :

Firebird

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut Base de données qui plante de temps en temps
    salut,
    je développe une petite application qui stocke sa production de données dans une base de données firebird 2.5.2
    de temps en temps, sans que je sache exactement pourquoi, la connexion à la base devient impossible.
    dans ce cas, il suffit que je fasse un backup et une restauration de la base pour régler le problème (avec GBAK).
    en parallèle, dans le même temps, la base prend beaucoup de volume par rapport à son contenu réel : elle peut atteindre 800 mo et redescendre à 50 mo une fois le backup/restore effectué.
    mon application est développée avec c++ builder et j'utilise la collection de composants fibplus pour gérer les connexions et les données.
    la base contient une 50taine de tables et à part une ou deux tables qui peuvent contenir beaucoup d'enregistrements (jusqu'à 1,5 million chez un client), il y a assez peu de données dans les autres tables.
    je n'arrive pas à déterminer si c'est un problème connu de firebird, si c'est un problème d'utilisation par nos clients ou si c'est un problème de conception et d'utilisation de la base de données.

    une idée ?
    _____
    __
    _

    Engi

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je pense plutôt qu'il s'agit d'un problème de gestion des transactions (ce qui serait confirmé par le grosse croissance puis décroissance de la BDD après restore), la perte de connexion étant peut être due au sweep de la base de données
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonsoir,

    Ça peut être un problème de transactions non closes comme le suggère Sergio, mais ça me rappelle aussi un problème signalé http://tracker.firebirdsql.org/browse/CORE-3951 lors de calculs sur les champs blob texte. Certains préconisent même de les remplacer par des varchar(30000).
    Gstat devrait vous fournir des informations sur les transactions non commitées. Le sujet a me semble-t-il été abordé lors de discussions sur ce forum, par exemple http://www.developpez.net/forums/d13...que-dur-100-a/

    André

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Salut, merci pour vos débuts de piste.
    Sur une base d'un client que j'ai sous les yeux, voilà les résultat du gstat :
    Database header page information:
    Flags 0
    Checksum 12345
    Generation 452113994
    Page size 4096
    ODS version 11.2
    Oldest transaction 84735678
    Oldest active 84735679
    Oldest snapshot 84735679
    Next transaction 452113981
    Bumped transaction 1
    Sequence number 0
    Next attachment ID 27
    Implementation ID 26
    Shadow count 0
    Page buffers 0
    Next header page 0
    Database dialect 3
    Creation date Jun 2, 2014 16:51:04
    Attributes force write, no reserve

    Variable header data:
    Sweep interval: 20000
    *END*

    A vrai dire, je ne sais pas trop comment interpréter la différence entre le paramètre next transaction et le oldest active !
    _____
    __
    _

    Engi

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    si je ne me trompe pas dans mes calculs (et sauf erreur de transcription) cela veut dire qu'il y a 367378308 transactions en cours !!!!!!
    là, il y a vraiment un problème !
    Soit votre programme gère (très) mal les transactions , soit vous avez eu affaires avec un utilisateur peu scrupuleux adepte du Ctrl+Alt+Suppr "quand ça va pas assez vite" << c'est du vécu, soit encore (toujours du vécu) un problème de réseau ou un problème sur le serveur (encore du vécu sur un processeur défaillant)

    faites votre choix !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    Citation Envoyé par engi Voir le message
    A vrai dire, je ne sais pas trop comment interpréter la différence entre le paramètre next transaction et le oldest active !
    Bizarre en effet que le numéro de la prochaine transaction soit inférieur à celui de la plus ancienne. Surtout que d'après http://stackoverflow.com/questions/2...count-exceeded ce numéro est un entier sur 31 bits qui ne repart pas à zéro automatiquement en cas de dépassement.
    Il serait intéressant de revoir les statistiques après un backup/restore pour voir si tout est correctement réinitialisé.

    André

  7. #7
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    SergioMaster : j'arrive au même calcul et c'est effectivement inquiétant.
    dans ce cas extrême, je pense quand même avoir affaire à un client peu enclin aux bonnes moeurs informatique mais des retours de plantage nous sont faits régulièrement et je ne me résous pas à l'idée que tous nos clients sont des sauvages.

    alanglet : non la prochaine est égale à : 452.113.981 alors que la plus ancienne vaut : 84.735.678 !

    je vais tenter de faire le tour complet de notre code source afin de vérifier s'il n'y a pas un soucis en terme de gestion des transactions.

    pour mon information personnelle, peut être n'ai je pas bien compris le fonctionnement du sweep.
    l'un d'entre vous peut il m'expliquer l'intérêt du sweep interval et de la fonction sweep ?
    ce n'est pas le vidage automatique du garbage collector ?
    dans notre cas, j'ai l'impression qu'il n'est jamais executé ...
    _____
    __
    _

    Engi

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    après un backup/restore, voila le résultat du gstat :

    Database header page information:
    Oldest transaction 126
    Oldest active 2
    Oldest snapshot 2
    Next transaction 127
    _____
    __
    _

    Engi

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    si je ne me trompe pas dans mes calculs (et sauf erreur de transcription) cela veut dire qu'il y a 367378308 transactions en cours !!!!!!
    là, il y a vraiment un problème !
    Hmmm, je dirai juste qu'il y a une (très) ancienne transaction non fermée, mais pas forcément que toutes les suivantes sont encore active non?
    Dans tous les cas, il y a effectivement un problème de ce coté là


    Citation Envoyé par alanglet Voir le message
    Bonjour,
    Bizarre en effet que le numéro de la prochaine transaction soit inférieur à celui de la plus ancienne. Surtout que d'après
    C'est ce qu'il semble au premier abord mais non : next transaction est 5 fois plus grand, avec donc un chiffre de plus

    Oldest active 84 735 679
    Next transaction 452 113 981

  10. #10
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Hmmm, je dirai juste qu'il y a une (très) ancienne transaction non fermée, mais pas forcément que toutes les suivantes sont encore active non?
    Dans tous les cas, il y a effectivement un problème de ce coté là
    Bonjour aieeeuuuuu,
    Si c'est effectivement le cas, comment forcer la fermeture de toutes les transactions pour remettre les compteurs à un niveau cohérent ?
    Le backup/restore n'aurait-il pas du le faire ?
    _____
    __
    _

    Engi

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Citation Envoyé par aieeeuuuuu
    je dirai juste qu'il y a une (très) ancienne transaction non fermée, mais pas forcément que toutes les suivantes sont encore active non?
    Oui, j'ai été trop pessimiste ou effrayant

    Ce qui suit est à prendre avec des pincettes :
    En fait si on regarde le GStat après le backup je dirais 2 non fermées (à moins que GSTAT en soit une)
    Il serait (très) intéressant de regarder ce que contient la table MON$TRANSACTION , si les transactions sont nommées dans le programme cela donnerait une piste de débogage (ou pas s'il s'agit d'un utilisateur indélicat)
    Toujours selon ton dernier GStat je dirais que tu y verras la transaction #126 ou #125
    Citation Envoyé par engi Voir le message
    Si c'est effectivement le cas, comment forcer la fermeture de toutes les transactions pour remettre les compteurs à un niveau cohérent ?
    Le backup/restore n'aurait-il pas du le faire ?
    Oui, si un shutdown de la base de données a été fait avant le backup, sinon AMHA seules les transactions fermées sont "supprimées"


    Quant au sweep il faut savoir qu'il se fait aussi au moment d'un backup (il me semble que makowski me l'avait souligné dans une de mes discussions sur ce forum)
    sinon, j'en ai discuté ici
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Pour info, je suis entrain de recenser toutes les utilisations de transactions dans le code source de nos applications et j'ai déjà trouvé des cas où, en cas d'erreur, il se pourrait que la ou les transactions actives ne soient pas refermées correctement.
    Je vais donc travailler sur le code et je ferai ensuite le point sur l'évolution des compteurs obtenus avec gstat.
    Merci à tous ceux qui ont participé à ce thread.
    _____
    __
    _

    Engi

Discussions similaires

  1. Fenetre Base de données qui disparait.
    Par sebinator dans le forum Access
    Réponses: 2
    Dernier message: 24/06/2008, 15h34
  2. Réponses: 1
    Dernier message: 15/05/2008, 18h45
  3. Requête à ma base de données qui empêche l'autocompletion
    Par kev42100 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/04/2008, 14h40
  4. [MySQL] Base de donnée qui n'affiche rien
    Par Prince Mch dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 31/01/2008, 16h36
  5. Réponses: 4
    Dernier message: 08/03/2007, 21h00

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