MSSql EXECUTE AS BENUTZER MIT COOKIE, was zu einem memoryverlust führt

Ich muss den Befehl EXECUTE AS USER WITH COOKIE viele Male verwenden. Nach der Implementierung wurde mir festgestellt, dass die nächsten Anrufe (gleich) mehr time für die Ausführung benötigen. Um die timeausführung zurückzusetzen, wird nur der SQL server Service neu gestartet.

Ich schrieb 2 einfache Tests mehrere Ausführung von Befehlen:

  • EXECUTE AS USER WITH COOKIE
  • EXECUTE AS USER

Beispiele:

 DECLARE @Loops INT SET @Loops = 1 DECLARE @CPU INT SET @CPU = @@CPU_BUSY DECLARE @StartDate DATETIME SET @StartDate = GETDATE() WHILE @Loops <= 3000 BEGIN DECLARE @cookie VARBINARY(8000); EXECUTE AS LOGIN = N'RestrictedLogin' WITH COOKIE INTO @cookie; declare @ab varchar(MAX); set @ab = convert(varchar(MAX), @cookie, 1); REVERT WITH COOKIE = @cookie; SET @Loops = @Loops + 1 END PRINT 'ISNULL, both non-NULL' PRINT 'Total CPU time: ' + CONVERT(varchar, @@CPU_BUSY - @CPU) PRINT 'Total milliseconds: ' + CONVERT(varchar, DATEDIFF(ms, @StartDate, GETDATE())) PRINT '' 

und

 DECLARE @Loops INT SET @Loops = 1 DECLARE @CPU INT SET @CPU = @@CPU_BUSY DECLARE @StartDate DATETIME SET @StartDate = GETDATE() WHILE @Loops <= 3000 BEGIN DECLARE @cookie VARBINARY(8000); EXECUTE AS LOGIN = N'RestrictedLogin'; set @cookie = convert(varbinary(8000), newid()); declare @ab varchar(MAX); set @ab = convert(varchar(MAX), @cookie, 1); REVERT; SET @Loops = @Loops + 1 END PRINT 'ISNULL, both non-NULL' PRINT 'Total CPU time: ' + CONVERT(varchar, @@CPU_BUSY - @CPU) PRINT 'Total milliseconds: ' + CONVERT(varchar, DATEDIFF(ms, @StartDate, GETDATE())) PRINT '' 

Ich bemerkte, dass für sqlservr process mehr memory nach jeder Ausführung von EXECUTE AS USER WITH COOKIE Befehl zugewiesen. Zur gleichen time, sqlservr process der privaten memory nicht geändert, nach der Ausführung EXECUTE AS USER . Und dieses Beispiel des Codes erfordert eine weniger time für die Ausführung (in einigen timeen zwischen 3-100x).

Um die Menge an privatem memory zu finden, habe ich den Performance Monitor benutzt

Meine Frage ist – Wie benutzt man den EXECUTE AS USER WITH COOKIE Befehl ohne memorylecks und Abbauzeit?