Bonjour à tous,
Tout d'abord, je vous explique le contexte: j'ai codé 5 procédures stockées pour alimenter plusieurs tables d'une base. La première est celle que je nomme Main, c'est elle qui déclenche l’exécution des procédures de travail. C'est également elle qui déclenche la transaction (BEGIN TRANSACTION) et sa validation (COMMIT) s'il n'y a pas eu d'erreur dans les autres procédures.
Dans les autres procédures, toutes les requêtes sont tracées dans une table de suivi de traitement. En cas d'erreur d'une des requêtes, l'annulation de la transaction dans sa globalité est déclenchée (ROLLBACK).
La procédure Main est appelée via l'agent SQL tous les soirs à 00:01.
Maintenant, voila mon problème: Le traitement complet dure plus de 3h! Grace à ma table de suivi, j'ai identifier que c'est l'exécution d'un INSERT vers une table temporaire qui prend la quasi-totalité du temps. Ma grande surprise a été de voir que cette même requête ne prenait que 2 min quand je l'exécute via SSMS.
J'ai alors retiré la transaction des procédures stockées et constaté que le traitement ne dure plus que quelques minutes.
Est-ce le mécanisme des transactions qui est en cause? Peut être que les tables temporaires et les transactions ne font pas bon ménage (sous SQL Server 2000)?
Merci d'avance à tous ceux qui pourront éclairer ma lanterne.
Partager