Bonjour,
Je voudrais sous sql server (dans une procédure stockée) exécuter une autre procédure stockée et pouvoir préciser un timeout.
Si la procédure stockée met trop de temps, je veux qu'elle s'arrête...
Merci d'avance pour vos réponses
Sybaris
Bonjour,
Je voudrais sous sql server (dans une procédure stockée) exécuter une autre procédure stockée et pouvoir préciser un timeout.
Si la procédure stockée met trop de temps, je veux qu'elle s'arrête...
Merci d'avance pour vos réponses
Sybaris
Bonjour,
Pour appeler une procédure stockée dans une procédure stockée, vous pouvez faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE PROCEDURE maProc @mesParams AS BEGIN . . . EXEC dbo.monAutreProcedure . . . ENDQuel intérêt ? Si vous avez demandé l'exécution d'une procédure sotckée, ce n'est pas pour ne pas qu'elle s'exécute suivant le temps qu'elle met à s'exécuter.Si la procédure stockée met trop de temps, je veux qu'elle s'arrête...
Si en revanche le temps qu'elle met est long, avez-vous regardé le plan de requête de votre procédure ?
Si votre procédure comprend plusieurs requêtes, savez-vous quelle requête est "lente" ?
A+
Les seuls time out que vous pouvez mettre en oeuvre c'est :
1) la connexion
2) l'obtention d'un verrou.
mais tuer une proc si elle ne finit pas dans un temps impartit est dangereux, car la tuer signifie un ROLLBACK. Or les ROLLBACK peuvent être plus coûteux que la finalisation par COMMIT !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Bonjour,
Tout d'abord merci de pour vos réponses.
Concernant l'intérêt de faire un timeout sur la procédure stockée, il est tout simple.
Le code de la procédure stockée que je dois appeler n'est pas de mon ressort. Il doit mettre fournit, et il n'est pas sur le même serveur de base de données que celui que mon application exploite. Or tant que je n'ai pas le résultat de cette procédure stockée, je doit bloquer mon utilisateur.
J'ai peur de plusieurs choses :
a/ Que le code de la procédure stockée que je dois appeler ne soit pas performant. (C'est un autre service informatique qui est responsable de ce code).
b/ Que le réseau ne soit pas terrible en terme de performances (voire même en terme de qualité)
Cette procédure stockée me renvoi que des données en lecture seule. Donc la je n'ai pas de problématique de rollback.
L'avantage d'avoir un timeout est que l'utilisateur saura de suite vers qui se tourner si il a un problème...
Vu vos réponses, je me pose la question si je vais pas appeler ma procédure stockée directement en dotnet dans un thread séparé, et si le thread ne répond pas dans le timeout, je lance mon exception. Je laisserais vivre le thread si il n'a pas terminé, mais au moins mon utilisateur n'est pas bloqué...
Sybaris
Ce sera effectivement plus élégant.
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Partager