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 :

Lenteur exécution requêtes delete


Sujet :

Firebird

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut Lenteur exécution requêtes delete
    Bonjour,

    Je travaille sur un projet qui utilise une base Firebird avec une quinzaine de tables. Les plus grosses tables contiennent ~45 000 enregistrements.
    Lorsque je fais une suppression des enregistrements contenus dans ces tables, le temps pris peut aller de 1 min 30 à 20 min. Si les enregistrements ont tous été créés d'un coup (par un import) la suppression prend 1 min 30. Si par contre la base à vécu et que les enregistrements ont étés créés sur 15 jours la suppression prend 20 min. Est ce qu'il y a une sorte de "fragmentation" qui pourrait survenir à l'usage et ralentir les suppressions (j'utilise Firebird 2.5.3) ? Si non, est ce que quelqu'un connaîtrait une des causes possible de ces ralentissements et aurait une solution?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je répondrai que c'est plutôt un problème de transaction(s) mal fermée(s)

    Est ce qu'il y a une sorte de "fragmentation" qui pourrait survenir à l'usage et ralentir les suppressions
    ces "fragmentations" ce sont les transactions en cours (non "commitées")
    une petite stat (gstat) sur la BDD devrait le montrer
    voir la discussion http://www.developpez.net/forums/d14...e-temps-temps/ pour info
    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 habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Merci pour ta réponse. J'ai fais un gstat et j'ai ça:

    Database "PLANNING_PJ.GDB"
    Database header page information:
    Flags 0
    Checksum 12345
    Generation 85
    Page size 4096
    ODS version 11.2
    Oldest transaction 31
    Oldest active 74
    Oldest snapshot 74
    Next transaction 76
    Bumped transaction 1
    Sequence number 0
    Next attachment ID 57
    Implementation ID 16
    Shadow count 0
    Page buffers 0
    Next header page 0
    Database dialect 3
    Creation date Jan 16, 2015 16:14:01
    Attributes force write

    Variable header data:
    Sweep interval: 20000
    *END*

    Au vu de ce que j'ai pu lire sur internet, j'aurais une transaction toujours active (d'id 74)?
    Sachant que je fais un backup et un restore de la base avant chaque démarrage du programme, est ce que ça n'aurait pas de toutes façon annulé cette transaction?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par neuromencien Voir le message
    Au vu de ce que j'ai pu lire sur internet, j'aurais une transaction toujours active (d'id 74)?
    oui
    Citation Envoyé par neuromencien Voir le message
    Sachant que je fais un backup et un restore de la base avant chaque démarrage du programme
    mais pourquoi diantre ? Cela voudrait dire que c'est une application monoposte ?
    Citation Envoyé par neuromencien Voir le message
    est ce que ça n'aurait pas de toutes façon annulé cette transaction?
    joker
    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

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    oui
    Et comment je peux fermer cette transaction pour vérifier si oui ou non ça va plus vite sans?

    Citation Envoyé par SergioMaster Voir le message
    mais pourquoi diantre ? Cela voudrait dire que c'est une application monoposte ?
    Non il s'agit bien d'une application clients/serveur. Le backup/restore au démarrage sert à compacter la base mais surtout à détecter les corruptions éventuelles en cas de coupure de courant (puisque Firebird ne semble pas avoir de mécanisme de journalisation qui garantis que les données sont toutes écrites ou pas du tout. On s'est déja retrouvés avec des bases corrompues suite à des coupures violentes des serveurs).

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je ne comprend pas vraiment
    Le backup/restore au démarrage sert à compacter la base mais surtout à détecter les corruptions éventuelles en cas de coupure de courant (puisque Firebird ne semble pas avoir de mécanisme de journalisation qui garantis que les données sont toutes écrites ou pas du tout. On s'est déja retrouvés avec des bases corrompues suite à des coupures violentes des serveurs).
    Mais cela fait plus de 10 ans que je n'ai pas eu un problème avec une base en Production , et encore la dernière fois il s'agissait alors de Interbase 5.5 et un processeur défectueux (surchauffe) du serveur.
    une transaction ne "s'arrêtera" que si la base est "éteinte" (shutdown) avant d'être sauvegardée (backup) et restaurée (restore) , bien sur il faudra ensuite redemarré la base.
    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

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    J'ai fais un shutdown et un backup/restore. Le compteur est bien repassé à 1 mais les temps ne s'améliorent pas. Je vais faire des tests avec une base MySQL pour comparaison.

    Par contre pour ce qui est des corruptions de base c'est une demande d'un de nos clients qui coupe électriquement les baies lors de ses tests. Mais ça nous à servi dans d'autres cas. Il y a 1 mois j'ai rencontré un cas ou 3 enregistrements d'une table on disparu entre le backup et le restore (pas de bol c'était le compteur d'index JPA et je me suis retrouvé avec des violations de clés primaires). Donc on a bien des corruptions de temps en temps.

    Merci pour ton aide.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par neuromencien Voir le message
    J'ai fais un shutdown et un backup/restore. Le compteur est bien repassé à 1
    CQFD
    mais les temps ne s'améliorent pas.
    ça par contre c'est totalement anormal maintenant tout dépend de la base, y a t-il des triggers impliqués dans la suppression (BEFORE DELETE, AFTER DELETE)
    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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Non, il n'y a pas de trigger. Et on observe que les performances se dégradent au fil du temps. On fait une centaine de milliers de requêtes DELETE. en commitant tous les 10 000 environ. Les 10 000 premières vont vite le 10 000 suivantes moins vite et ainsi de suite. Quand on active les traces on voit que certaines requêtes prennent 0 ms et d'autres 200 ms alors qu'elle sont identiques... Et on a de plus en plus de requêtes à 200 ms au fil du temps.

Discussions similaires

  1. [AC-2010] Problème exécution requête DELETE
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/05/2011, 14h56
  2. [AC-2007] Lenteur d'exécution requête outer join
    Par j.lebowski dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2010, 11h55
  3. erreur exécution requête
    Par MANU_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/10/2005, 07h27
  4. exécuter requête au clic sur valider
    Par rangernoir dans le forum Access
    Réponses: 6
    Dernier message: 09/09/2005, 15h01
  5. [requête] DELETE + SELECT
    Par doohan dans le forum Requêtes
    Réponses: 6
    Dernier message: 07/07/2003, 12h27

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