J'ai une application .net qui doit exécuter une série d'étapes dans un travail. Chaque étape vit dans sa propre transaction et toutes les tâches sont exécutées en série (pas d'async explicite). Les deux dernières tâches sont une transformation de données et une récupération de données des données transformées. Nous obtenons des erreurs d'interblocage à partir de ces deux dernières étapes, car la dernière étape ressemble à essayer d'obtenir des données que l'étape précédente a encore verrouillé.Les procédures stockées programmées pour déclencher des transactions série distinctes semblent s'exécuter simultanément
Est-il possible que SQL signale que l'exécution est terminée, avant qu'il ne l'est réellement? Un verrou peut-il persister dans une transaction terminée? Y a-t-il autre chose que je devrais rechercher pour comprendre ce qui se passe?
Par série, je veux dire l'un après l'autre. Chaque transaction est terminée avant que la suivante ne commence. Si des échecs se produisent, cette transaction est annulée et l'ensemble du processus arrêté pour permettre à l'utilisateur de réessayer.
Elles proviennent de différents spids sur le serveur et chaque processus ne peut être exécuté que par un seul utilisateur. – StingyJack
Peut-être que nous devons définir "processus". Même avec des requêtes différentes par différents utilisateurs, vous pourriez toujours tomber dans des blocages. Par exemple, queryUser1 doit accéder aux données de A, B, C et queryUser2 doit accéder aux données de D, B, A. Si queryUser1 acquiert A, alors queryUser2 acquiert B, vous serez bloqué, car maintenant queryUser2 ne peut pas obtenir A pour continuer, et queryUser1 ne peut pas obtenir B pour continuer. – Nathan
processus == travail. chaque processus/travail n'est exécuté que par un utilisateur à la fois. – StingyJack