Query's duren langer om te voltooien wanneer de grootte van de cache van de TokenAndPermUserStore in SQL Server 2005 wordt uitgevoerd

BUG #: 429501 (SQLBUDT)

Symptomen

In Microsoft SQL Server 2005, kunnen de volgende symptomen optreden:

  • Query's die gewoonlijk sneller duren langer om te voltooien.

  • CPU-gebruik voor de SQL Server-proces is meer dan gebruikelijk.

  • Wanneer u prestaties nemen af wanneer u een ad-hoc query uitvoert, kunt u de query uit de sys.dm_exec_requests of sys.dm_os_waiting_tasks beheer van dynamische weergave bekijken. Echter, de query niet wacht op een bron.

  • De grootte van de cache TokenAndPermUserStore store groeit met een constante snelheid.

  • De grootte van de cache-opslag van TokenAndPermUserStore is in de volgorde van enkele honderden megabytes (MB).

  • In sommige gevallen biedt de uitvoering van de opdracht DBCC FREEPROCCACHE tijdelijke vrijstelling.

Wilt u de grootte van de cache TokenAndPermUserStore volgen, kunt u een query met de volgende strekking weergegeven:

SELECT SUM(single_pages_kb + multi_pages_kb) AS 
"CurrentSizeOfTokenCache(kb)"
FROM sys.dm_os_memory_clerks
WHERE name = 'TokenAndPermUserStore'

Oorzaak

De cache-opslag van TokenAndPermUserStore houdt het volgende token typen:

  • LoginToken

  • TokenPerm

  • UserToken

  • SecContextToken

  • TokenAccessResult.

Verschillende klassen van de posten van de TokenAccessResult zijn ook aanwezig. Dit probleem treedt op omdat veel TokenAccessResult posten met een klasse van 65535 aanwezig zijn.


Voor een exemplaar van SQL Server met een hoge frequentie van de uitvoering van de willekeurige dynamische query, ziet u veel TokenAccessResult posten met een klasse van 65535 in de weergave van de sys.dm_os_memory_cache_entries . TokenAccessResult posten met een klasse van 65535 vertegenwoordigen speciale cachevermeldingen. Deze vermeldingen in de cache worden gebruikt voor de controle van de cumulatieve machtiging voor query's. U kunt bijvoorbeeld de volgende query uitvoeren:

select * 
from t1 join t2 join t3

In dit geval wordt de SQL Server een selectievakje cumulatief toestemming voor deze query. Dit selectievakje bepaalt of een gebruiker selecteren op t1, t2, t3. Deze machtiging cumulatieve resultaten zijn ingesloten in een post TokenAccessResult en in de winkel TokenAndPermUserStore cache met een ID van 65535 worden ingevoegd. Als dezelfde gebruiker hergebruikt of deze query meerdere malen uitvoert, hergebruikt door SQL Server de cachevermelding TokenAccessResult één keer.

Als dit archief cache groeit, neemt de tijd om te zoeken naar bestaande posten te gebruiken. Toegang tot deze cache beheerd zodat slechts één thread kan de zoekopdracht uitvoeren. Dit probleem uiteindelijk oorzaken vertraagt opvragen en meer CPU-gebruik plaatsvindt.

Oplossing

Informatie over het service pack

U lost dit probleem, het meest recente servicepack voor SQL Server 2005 te verkrijgen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

913089 het verkrijgen van het meest recente servicepack voor SQL Server 2005
SQL Server 2005 Service Pack 2 wordt dit probleem op te lossen het cachinggedrag van de machtiging tokens. Standaard TokenAccessResult beveiliging vermelding in de cache voor ad hoc query's is alleen in de cache opgeslagen wanneer een specifieke ad-hoc query opnieuw wordt uitgevoerd.

Tijdelijke oplossing

Om dit probleem te omzeilen, gebruikt u een of meer van de volgende methoden:

  • Ad-hoc query's uitdrukkelijk voorzien.

    Opmerkingen

    • Met deze methode kunt u ad hoc-query's en hun plannen effectief te hergebruiken.

    • Wanneer u deze methode gebruikt, er geen vermelding voor een TokenAccessResult maken elke keer dat u de ad-hoc query samen met andere parameters worden uitgevoerd.

    • Met deze methode wordt de grootte van de cache TokenAndPermUserStore onder redelijke grenzen blijft.

  • Ad-hoc query's in opgeslagen procedures teruglopen en opgeslagen procedures gebruiken in plaats van ad-hoc query's rechtstreeks uitvoeren.


    Opmerkingen

    • Uitvoering van plannen in de cache opgeslagen voor de instructies die in de opgeslagen procedure.

    • De vermelding TokenAccessResult for each-instructie is gekoppeld aan de uitvoering van plan post.

    • Zolang het uitvoeringsplan voor deze procedure blijft in de cache worden opgeslagen, wordt gebruikgemaakt van elke uitvoering van de opgeslagen procedure effectief de posten TokenAccessResult. Dus hebt niet voor het maken van nieuwe posten van de TokenAccessResult.

  • Schakel de optie FORCE_PARAMETERIZATION database.

    Opmerkingen

    • Met deze methode kunt u ad hoc-query's en hun plannen effectief te hergebruiken.

    • Wanneer u deze methode gebruikt, er geen vermelding voor een TokenAccessResult maken elke keer dat u de ad-hoc query samen met andere parameters worden uitgevoerd.

    • Met deze methode wordt de grootte van de cache TokenAndPermUserStore onder redelijke grenzen blijft.

  • Voeg de aanmelding die wordt uitgevoerd gevarieerd ad hoc query's als lid van de groep van de server sysadmin.

    Opmerkingen

    • TokenAccessResult gegevens worden alleen gemaakt voor een ad-hoc query wanneer de query wordt uitgevoerd door een aanmelding die is geen lid van de groep van de server sysadmin.

    • Omdat de TokenAccessResult posten worden gemaakt, blijft dit probleem de grootte van de TokenAndPermUserStore tot een beheersbaar formaat.

  • Posten van de TokenAndPermUserStore-cache leegmaken.

    Opmerkingen

    • Voer hiertoe de volgende opdracht uit:

      DBCC FREESYSTEMCACHE (TokenAndPermUserStore)

    • In het ideale geval proberen de drempel van de grootte van de TokenAndPermUserStore kijken wanneer problemen te voorkomen.

    • U kunt een geplande taak voor SQL Server Agent die de volgende acties uitvoert:

      • Controleer de grootte van de grootte van de TokenAndPermUserStore. Voer hiertoe de volgende opdracht uit:

        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
        "CurrentSizeOfTokenCache(kb)"
        FROM sys.dm_os_memory_clerks
        WHERE name = 'TokenAndPermUserStore'
      • Als u de grootte van de cache groter is dan de drempelwaarde die u in acht genomen, de volgende opdracht uitvoeren:

        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Referenties

Voor meer informatie klikt u op de volgende artikelnummers om de artikelen in de Microsoft Knowledge Base te bekijken:

933564 oplossen: een geleidelijke toename van het geheugenverbruik voor de winkel USERSTORE_TOKENPERM cache plaatsvindt in SQL Server 2005

959823 het aanpassen van het quotum voor de winkel TokenAndPermUserStore cache in SQL Server 2005 Service Pack 3

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Hoe tevreden bent u met de vertaalkwaliteit?

Wat heeft uw ervaring beïnvloed?

Hebt u aanvullende feedback? (Optioneel)

Bedankt voor uw feedback.

×