tyhom
Messages postés3Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention14 juin 2010
-
3 juin 2010 à 15:16
tyhom
Messages postés3Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention14 juin 2010
-
14 juin 2010 à 11:11
Bonjour à tous,
je rencontre actuellement des problèmes d'interblocage entre utilisateurs dans une application Delphi 4 dont la base de données SQL Server 7 se trouve sur un serveur équipé de Windows Server 2000.
Les utilisateurs (5) utilisent l'application depuis près d'un an déjà sans qu'aucun problème ne vienne perturbé l'utilisation simultanée de l'application. Tous les postes sont sous windows XP.
Cependant, depuis environ 2 mois, il apparait plusieurs fois par jour des blocages lorsque les utilisateurs utilisent l'application simultanément.
Ces blocages concernent toujours une insertion/modification dans une table précise (toujours la même).
J'ai pu voir grâce à SQL Server que dans ces moments de blocages, la table en question est verrouillée. De plus, je peux voir qu'un verrou est ajouté dans la liste des "Verrous/Objets" avec le nom de cette table (verrou de type PAG et TAB). Enfin, toujours dans SQL Server, je peux savoir le login de l'utilisateur qui a "créé" le verrou, mais ce login varie selon les blocages.
J'ai noté aussi qu'à chaque fois que ce problème apparait, un certain utilisateur (login 'patrick') vient ou est en train d'utiliser la fonctionnalité qui modifie cette table. Pourtant je ne vois pas en quoi sa présence pourrait modifier quelque chose.
Ce qui me gène le plus pour corriger ce problème c'est qu'il n'intervient pas à chaque fois que des utilisateurs utilisent l'application simultanément.
C'est pourquoi j'aimerais savoir ce qui, selon vous, en Delphi (commande, transaction non terminée...) peut faire apparaître des verrous sur des tables entières.
Je vous remercie énormément pour l'attention que vous prêterez à ce message.
tyhom
Messages postés3Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention14 juin 2010 14 juin 2010 à 11:11
Bonjour,
Le problème venait bien de mon programme Delphi, en effet, un verrou était posé sur la table juste après l'appel de Q_Contact.Open et pendant une trentaine de secondes.
J'ai remarqué qu'en faisait simplement après le Open :
Q_Contact.Last;
Q_Contact.First;
le verrou de trente secondes disparaissait.
Par la suite j'ai ajouté un index sur la table concernée pour accélérer le select.
tyhom
Messages postés3Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention14 juin 2010 4 juin 2010 à 16:41
Re bonjour
En fait après de nombreux nouveaux essais j'en suis arrivé à la conclusion suivante : le verrou sur ma table est créé par l'appel de la procédure Open de la TQuery (Q_Contact) que j'utilise pour remplir la Grid qui liste le contenu de la table qui pose problème (son nom est T_Contact).
Je ne comprends vraiment pas pourquoi celle-ci crée un verrou car il s'agit seulement d'une requête de type select sur une vue (qui est une jointure de plusieurs tables dont la fameuse table contact) initialisée comme ceci :