Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2008, 14h57   #1
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
Par défaut COMMIT ou COMMITRETAINING EN CLIENT/SERVEUR

Je pose la première pierre :

Pour ma part, le CommitRetaining est + rapide que le Commit.
Pourquoi ?
Dans cette option, les données de la base ne sont pas rafraîchies intégralement ce qui n'est pas le cas du Commit.
Evidemment, l'une ou l'autre des solutions a ses avantages et ses inconvénients.
Avec CommitRetaining, les opérations de validation sont bcp plus performantes mais les autres utilisateurs doivent rafraîchir les données pour voir les résultats.

C'est donc un choix stratégique qui dépend du contexte dans lequel on travaille.

Votre avis ?

cantador
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 15h46   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 790
Points : 6 790
Salut
Citation:
Envoyé par cantador Voir le message
Evidemment, l'une ou l'autre des solutions a ses avantages et ses inconvénients.
Je n'argumenterai pas sur les avantages ou inconvénients. Ceci pour une raison simple, je m'interdis l'utilisation du CommitRetaining.
Partant du principe qu'une transaction ne doit rester ouverte que le temps strictement nécessaire aux traitements sur les données.

Que ce soit pour une requête Select ou une requête Action, je démarre la transaction, je traite les données, et immédiatement je commit.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 16h02   #3
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
La seule différence entre les 2 se situe sur la libération des ressources intrinsèques dédiées à la transaction...
Citation:
isc_commit_retaining() writes all pending changes to the database, ends the current transaction without closing its record stream and cursors and without freeing its system resources, then starts a new transaction and assigns the existing record streams and system resources to the new transaction.
Le protocole Interbase étant très bavard, le fait de ne pas avoir à "négocier" l'allocation de ressources peut être avantageux.

Cependant, comme Cl@udius, j'évite. D'ailleurs, je m'arrange pour concevoir mes applis en ce sens.

Après, c'est un autre débat.
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 16h33   #4
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
Le CommiRetaining conserve le contexte de la transaction mais sans tenir des autres en cours..
Bien sûr, je préfèrerai faire un Commit..

Ce qui m'étonne c'est la différence incroyable de la vitesse d'exécution.

Sinon pour les conséquences, il y a plus de peur que de mal...

(juste un détail je suis sous Firebird 1.5.4)

@bientôt
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 00h23   #5
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par cantador Voir le message

Ce qui m'étonne c'est la différence incroyable de la vitesse d'exécution.

Sinon pour les conséquences, il y a plus de peur que de mal...
J'ai un exemple qui montre tout le contraire
sur des gros volume le commit retaining est le pire qui soit pour les perfs et la santé de la base
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 09h18   #6
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
@makowski:

"sur des gros volume le commit retaining est le pire qui soit"

Je suis très intéressé cette information.
Tu évoques "des gros volumes"..

Pourrais-tu m'indiquer leurs dimensions ?

merci par avance
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 09h30   #7
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
bah, un petit exemple simple sur des volumes pas si gros que ça :
Avec commit retain:
Citation:
Database header page information:
Oldest transaction 1
Oldest active 2
Oldest snapshot 2
Next transaction 5

Make a select count
200 rows time 0.0170.

Make 500*200 update with commit retain every 200
udate time 198.2554.

Database header page information:
Oldest transaction 6
Oldest active 7
Oldest snapshot 7
Next transaction 99308

Make a select count
200 rows time 35.4962.

Database header page information:
Oldest transaction 99308
Oldest active 7
Oldest snapshot 7
Next transaction 99309

Make a select count
200 rows time 0.0029.
Sans commit retain :
Citation:
Database header page information:
Oldest transaction 1
Oldest active 2
Oldest snapshot 2
Next transaction 5

Make a select count
200 rows time 0.0095.

make 500*200 update with commit every 200
udate time 16.2761.

Database header page information:
Oldest transaction 503
Oldest active 504
Oldest snapshot 504
Next transaction 505

Make a select count
200 rows time 0.0054.

Database header page information:
Oldest transaction 503
Oldest active 504
Oldest snapshot 504
Next transaction 506

Make a select count
200 rows time 0.0035.
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 11h14   #8
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 47
Points : 26
Points : 26
bonjour à tous

nous utilisons souvent le commit retaining dans des instructions longues,avec usage de générateur - afin d'être certain que les derniers info saisies vont être les bonnes si on les utilise dans la même instruction.

Evidemment, on ferme la procédure par un commit.

Est-ce une erreur de programmation ?

De la meme manière, on finit l'appel à la dll dans le afterdispatch par un :
if IBTransaction.Active then IBTransaction.Commit;
if IBDatabase.Connected then IBDatabase.Close;

Est ce une bonne méthode... on fait cela depuis des lustres mais si ca se trouve, on est dans l'erreur...

Je précise qu'on developpe sous delphi 7 - avec webmodules.
jose.ignacio.agata est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 14h22   #9
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par jose.ignacio.agata Voir le message
Est ce une bonne méthode... on fait cela depuis des lustres mais si ca se trouve, on est dans l'erreur...
Et à ton avis
mon exemple n'est pas assez éloquant ?
j'en ai d'autres comme ça des petits exemples sur la mauvaise gestion des transactions que je montre en formation.
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 17h20   #10
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
@makowski :

Je souhaiterai avoir un bout de code qui a généré une partie de ses résultats:
Avec CommitRetainning
Sans CommitRetainning

car je ne suis pas certain que les techniques soient les mêmes.
(j'ai vu récemment CommitRetaining à la place de StartTransaction..)

merci par avance
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 17h48   #11
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Il n'y a pas plusieures manières de faire
on ouvre une transaction et on fait un commit ou un commit retain c'est tout
et ce quelque soit le type de transaction utilisée.
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 18h31   #12
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
Comme çà au moins c'est clair

Reste à savoir pourquoi en ce qui me concerne, j'ai des temps de validation
10 fois + rapide avec CommitRetaining qu'avec Commit et ce sur la zone en câblage direct avec le serveur..
Evidemment pour les sites distants c'est encore pire.

@+
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 19h06   #13
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par cantador Voir le message
Comme çà au moins c'est clair

Reste à savoir pourquoi en ce qui me concerne, j'ai des temps de validation
10 fois + rapide avec CommitRetaining qu'avec Commit et ce sur la zone en câblage direct avec le serveur..
Evidemment pour les sites distants c'est encore pire.

@+
parce que tu garde le contexte de la transactions et dans certains cas cela peut être utile, mais cela peut être rapide sur le coup et entrainer des dégradation de perfs plus tard, faire grossir inutilement les données périmées à collecter et donc obliger à faire des restores, alors qu'une base bien gérée n'a jamais besoin de connaitre de restauration, sauf en cas de changement de version du serveur.

je serais tout de même curieux de voir les stats de la base après une journée de fonctionnement ...
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 19h38   #14
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
je dis ok.
quel est le fichier que tu veux ?

@+
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 21h53   #15
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
la sortie d'un gstat -h
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 22h22   #16
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
ok, je te le transmets dès que possible.

@bientôt
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h04   #17
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
Par défaut les stats..

En fait, j'ai tapé la commande complète :

gstat -h <mabase> -user sysdba -password monpassword

et voilà le résultat :

Database header page information:
Flags 0
Checksum 12345
Generation 7564
Page size 4096
ODS version 10.1
Oldest transaction 464
Oldest active 6666
Oldest snapshot 6651
Next transaction 6773
Bumped transaction 1
Sequence number 0
Next attachment ID 0
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Jan 14, 2008 14:05:55
Attributes

Variable header data:
Sweep interval: 20000
*END*

le 14/01/2008 m'étonne un peu, à moins que ce ne soit la date de mon dernier backup/restore..

@+
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 10h07   #18
Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 47
Points : 47
Par défaut précision

j'ai lancé cette commande sur mon poste en local après avoir recopié la base réseau en local..
cantador est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 15h40   #19
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par cantador Voir le message
j'ai lancé cette commande sur mon poste en local après avoir recopié la base réseau en local..
Pardon ?
la base était en activité ?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2008, 15h56   #20
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par cantador Voir le message
Oldest transaction 464
Oldest active 6666
Oldest snapshot 6651
Next transaction 6773
Creation date Jan 14, 2008 14:05:55
Creation date : date de création de la base (dernière restauration)

Next transaction 6773 soit 6772 transactions depuis cette date soit 450 transactions par jour, cette base est faiblement sollicitée

Oldest transaction (OIT) 464
Oldest active (OAT) 6666
gap : 6202

ceci dit il semble bien (et ce n'est pas une surprise avec les commit retain) que la collecte des données périmées ne peut pas se faire, à force, ce gap va continuer à grossir et créer des pertes de performances, mais comme la base est peu sollicité, tu ne t'en rend pas vraiment compte ou alors seulement au bout d'un bon moment, ce qui t'amène pour corriger cela à faire un backup et un restore pour que tout rentre dans l'ordre, alors que normalement avec une base comme ça un restore qu'à chaque changement de version majeur de Firebird devrait suffire.
Voilà vite fait.
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h04.


 
 
 
 
Partenaires

Hébergement Web