Commande de mise en veille en T-SQL?
Est-il à la façon d'écrire une commande T-SQL, juste le faire dormir pendant une période de temps? Je suis en train d'écrire un web service en mode asynchrone et je veux être en mesure de faire quelques tests pour voir si le modèle asynchrone est vraiment de rendre plus évolutif. Dans le but de "se moquer de" un service externe qui est lent, je veux être en mesure d'appeler un serveur SQL avec un script qui s'exécute lentement, mais n'est pas réellement de traitement d'une tonne de trucs.
- Bonne question! Je pourriez utiliser ce temps en temps. Comme un ensemble à part, c'est la première fois que j'ai jamais entendu parler de vouloir la DB à être plus lent 😉
- Je suis ahuri par l'appel d'un service asynchrone à partir de T-SQL.
Vous devez vous connecter pour publier un commentaire.
regarder la WAITFOR commande
Par exemple.
Cette commande vous permet un haut degré de précision, mais est seulement précis à l'intérieur de 10ms - 16ms sur une machine typique, puisqu'il repose sur GetTickCount. Ainsi, par exemple, l'appel
WAITFOR DELAY '00:00:00:001'
est susceptible d'entraîner aucune attente.CREATE FUNCTION [dbo].[ForcedTimeout](@seconds int) returns int as BEGIN DECLARE @endTime datetime2(0) = DATEADD(SECOND, @seconds, GETDATE()); WHILE (GETDATE() < @endTime ) BEGIN SET @endTime = @endTime; -- do nothing, but SQL requires a statement. END
Je crois que le maximum de temps cela peut attendre, il est de 23 heures, 59 minutes et 59 secondes.
Voici une fonction Scalaire de montrer que c'est leur utilisation; le dessous de la fonction prend un paramètre de type entier de secondes, qu'il traduit ensuite en HH:MM:SS et l'exécute à l'aide de la
EXEC sp_executesql @sqlcode
commande de requête. Ci-dessous la fonction est à des fins de démonstration seulement, je sais c'est pas bien adapté pour vraiment comme une fonction scalaire! 🙂SI vous souhaitez retard de plus de 24 heures, je vous suggère d'utiliser un @Jours paramètre d'aller pour un certain nombre de jours et envelopper la fonction exécutable à l'intérieur d'une boucle... e.g..
Only functions and some extended stored procedures can be executed from within a function.
MS Docs fournir un exemple d'utilisation Stockées Procs - on dirait que cette approche n'est pas valideVous pouvez également "ATTENTE" d'un "TEMPS":
PRINT
au lieu deRAISERROR
?Ici est très simple morceau de code C# pour tester la CommandTimeout avec.
Il crée une nouvelle commande qui va attendre 2 secondes.
Définir la CommandTimeout à 1 seconde et vous verrez une exception lors de l'exécution.
Réglage de la CommandTimeout à 0 ou quelque chose de plus élevé que les 2 fonctionnent très bien.
Par ailleurs, le défaut CommandTimeout est de 30 secondes.