J'ai une procédure qui insère des données d'une table à une autre et une fois cela prend de l'exemple 5 minutes et la fois suivante par exemple 15 minutes. Je veux écrire du code qui crée un journal dans ma table de journal lorsque la procédure prendra plus de 10 minutes. Existe-t-il une fonction ou un compteur de temps en ms sql que je peux utiliser?
3 Réponses :
Vous pouvez essayer de cette façon
declare @start datetime = getdate() -- your SQL statements exec dbo.MyStoredProcedure declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())
Ajoutez les lignes suivantes dans votre SP et cela devrait fonctionner:
ALTER PROCEDURE YourSP
AS
BEGIN
DECLARE @StartTime AS DATETIME = GETDATE();
... <Your current lines>
IF DATEDIFF(mi, @StartTime, GETDATE()) > 10
INSERT INTO LogTable <YourFields>, MinutesSpent
VALUES <YourValues>, DATEDIFF(mi, @StartTime, GETDATE())
END
C'est trop long pour un commentaire.
Pourquoi ne consigneriez-vous que certains appels à la procédure stockée? Vous devez enregistrer tous les appels et filtrer ceux que vous souhaitez. Cette semaine, vous pourriez être intéressant pour des horaires de plus de 10 minutes. La semaine prochaine, les données pourraient augmenter et cela pourrait prendre 12 minutes. Ou vous pouvez changer le code pour le rendre plus efficace, et il devrait se terminer en 2 minutes.
Si vous n'êtes intéressé que par le timing, j'écrirais une table de log plutôt générique, quelque chose comme ceci: p>
select count(*)
from spTimeLog tl
where tl.procedureName = 'usp_proc' and
endDateTime > dateadd(minute, 10, startDateTime);
Ensuite, vous pouvez obtenir les informations que vous souhaitez lorsque vous interrogez la table:
create table spTimeLog (
procedureName varchar(255),
startDateTime datetime
endDateTime datetime,
createdAt datetime default getdate()
);
create procedure usp_proc . . .
begin
declare @StartTime datetime = getdate();
. . .
insert into spTimeLog (procedureName, startDateTime, endDateTime)
values ('usp_proc', StartTime, getdate());
end;
En général, lorsque j'écris des procédures stockées pour une application réelle, les procédures stockées génèrent des journaux d'audit lorsqu'elles entrent et sortent - à la fois avec succès et en cas d'échec.
Enregistrez l'heure actuelle au début du SP et vérifiez à la fin du SP si la différence par rapport à l'heure actuelle est supérieure au montant que vous souhaitez vérifier, et enregistrez-la si c'est le cas. Peut faire à l'intérieur ou à l'extérieur de SP, comme vous le souhaitez.