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 20/12/2007, 10h46   #1
Invité de passage
 
Inscription : mars 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 43
Points : 4
Points : 4
Par défaut Trigger et Deadlock

Bonjour à tous,

Je travaille sur une application redondée, avec 2 serveurs. Sur chacun des serveurs se trouve un base de données, et le but est de répliquer la base du serveur actif (qui se rempli régulièrement), sur le serveur passif.

Pour cela, les bases contiennent deux tables, qu'on appelera A et B. En fait, B contient exactement les mêmes champs que A, avec en plus un champ "A répliquer". Il y a un trigger sur A, qui fait en sorte que dès qu'il y a une entrée, on la copie dans B, avec le champ "A répliquer" à 1.

Le serveur passif a pour but de régulièrement lire la table B du serveur actif, et de recopier dans sa table A toutes les entrées de la table B qui ont le champ "A répliquer" à 1. Pour cela, une transaction est utilisée ainsi (sur le serveur passif) :
Debut Transaction
On recupère les lignes de la table B du serveur actif avec le champ "A répliquer" à 1
On les écris localement sur la table A
On met le champ "A répliquer" à 0 des lignes répliquées de la table B du serveur actif
Fin Transaction

Cela fonctionne la plupart du temps, mais de temps en temps, je tombe sur un deadlock :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
*** IBPP::Exception inside Statement::Execute ***
 
IBPP Message : isc_dsql_execute2 failed.
 
SQL Message : -913
deadlock
.
 
Engine Code    : 335544336
Engine Message :
deadlock
UPDATE conflicts WITH concurrent UPDATE
Donc ma question est la suivante : d'où pourrait venir ce deadlock, étant donné que durant la transaction, seul le trigger du serveur actif va agir sur la table B. Le déclenchement du trigger pendant la transaction du serveur passif peut déclencher ce deadlock ?

J'espère avoir été assez clair, et merci pour votre aide.
inh40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 10h51   #2
Invité de passage
 
Inscription : mars 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 43
Points : 4
Points : 4
Petite info supplémentaire : j'observe le deadlock dans les logs du serveur passif, c'est à dire pendant la Transaction qui sert à répliquer.
inh40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2007, 10h21   #3
Membre du Club
 
Avatar de Moine
 
Inscription : mars 2006
Messages : 172
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 172
Points : 44
Points : 44
Par défaut Trigger et Deadlock

Modifie la transaction comme suit:

Debut Transaction
On recupère les lignes de la table B du serveur actif avec le champ "A répliquer" à 1
On les écris localement sur la table A
Fin Transaction
donne uniquement la possibilité à ton trigger de mettre "A Reppliquer" à 1. ok?

ton trigger et les operations effectuées dans ta transaction sont à l'origine du deadlock. Tiens nous au courant!
__________________
Vive les bug!
Ils font découvrir beaucoup de choses.
Moine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2007, 21h55   #4
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 faudrait aussi connaitre quels types de transactions sont utilisées
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 13h39   #5
Membre confirmé
 
Avatar de TMuet
 
Homme Olivier Muet
Responsable de service informatique
Inscription : septembre 2003
Messages : 222
Détails du profil
Informations personnelles :
Nom : Homme Olivier Muet
Localisation : France

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

Informations forums :
Inscription : septembre 2003
Messages : 222
Points : 254
Points : 254
...et peut-être accroître légèrement le temps de déclenchement du deadlock.
TMuet 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 07h58.


 
 
 
 
Partenaires

Hébergement Web