Abfragen dauern länger, wenn dem TokenAndPermUserStore Cachegröße in SQL Server 2005 wird beendet

Fehler #: 429501 (SQLBUDT)
Fehler #: 429501 (SQL BU Fehler nachverfolgen)Fehler #: 64830 (Content Maintenance)

Problembeschreibung

Microsoft SQL Server 2005 können die folgenden Symptome auftreten:
  • Abfragen, die in der Regel schneller dauern länger beendet.
  • CPU-Auslastung für den SQL Server-Prozess ist mehr als üblich.
  • Leistungseinbußen auftreten einer ad-hoc-Abfrage, die Abfrage in der dynamischen dm_exec_requests oder sys.dm_os_waiting_tasks angezeigt. Jedoch wird die Abfrage nicht auf eine Ressource warten angezeigt.
  • Die Größe des Cache-Speichers TokenAndPermUserStore wächst stetig.
  • Die Größe des Cache-Speichers TokenAndPermUserStore beträgt mehrere hundert Megabyte (MB).
  • In einigen Fällen bietet die Ausführung des Befehls DBCC FREEPROCCACHE vorübergehend.
TokenAndPermUserStore-Cachegröße überwachen, können Sie eine Abfrage, die der folgenden ähnelt:
SELECT SUM(single_pages_kb + multi_pages_kb) AS    "CurrentSizeOfTokenCache(kb)" 
FROM sys.dm_os_memory_clerks
WHERE name = 'TokenAndPermUserStore'

Ursache

TokenAndPermUserStore Cache-Speicher verwaltet token folgenden Sicherheitstypen:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Verschiedene Klassen von TokenAccessResult Einträge sind ebenfalls vorhanden. Dieses Problem tritt auf, da viele TokenAccessResult Einträge, die eine Klasse von 65535 vorhanden sind.


In einer Instanz von SQL Server, die eine hohe random dynamische Abfrage stellen Sie viele TokenAccessResult Einträge, die eine Klasse von 65535 an sys.dm_os_memory_cache_entries . TokenAccessResult-Einträge, die eine Klasse von 65535 darstellen besondere Cacheeinträge. Diese Einträge im Cache sind kumulative Berechtigung Schecks für Abfragen verwendet. Beispielsweise kann die folgende Abfrage ausführen:
select * from t1 join t2 join t3
In diesem Fall berechnet SQL Server diese Abfrage eine kumulative Berechtigung überprüfen. Diese Überprüfung bestimmt, ob ein Benutzer auf t1, t2, t3 auswählen. Diese kumulative Berechtigung Ergebnisse in einen TokenAccessResult-Eintrag eingebettet und TokenAndPermUserStore Cache-Speicher mit der Kennung 65535 eingefügt. Wenn derselbe Benutzer verwendet, wird diese Abfrage mehrmals ausgeführt verwendet SQL Server den Cacheeintrag TokenAccessResult einmal wieder.

Wenn diese Cachespeicher wächst, dauert das Suchen Einträge wiederverwenden. Zugriff auf diesen Cache erfolgt so, dass nur ein Thread suchen kann. Schließlich wird Abfragen dies Leistung und mehr CPU-Auslastung ein.

Problemlösung

Service Pack-Informationen

Um dieses Problem zu beheben, beziehen Sie das neueste Servicepack für SQL Server 2005. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
913089 so erhalten Sie das neueste Servicepack für SQL Server 2005
Um dieses Problem zu beheben, wird SQL Server 2005 Service Pack 2 das Zwischenspeicherungsverhalten Permission-Token. Standardmäßig ist der TokenAccessResult Sicherheit Cacheeintrag für ad-hoc-Abfragen nur zwischengespeichert, wenn eine bestimmte ad-hoc-Abfrage erneut ausgeführt wird.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, verwenden Sie eine oder mehrere der folgenden Methoden:
  • Parametrisieren Sie ad-hoc-Abfragen explizit.

    Hinweise
    • Diese Methode können Sie ihre Pläne und ad-hoc-Abfragen effizient wiederverwenden.
    • Wenn Sie diese Methode verwenden, müssen Sie keinen TokenAccessResult Eintrag jedes Mal erstellen, die ad-hoc-Abfrage mit verschiedenen Parametern ausgeführt.
    • Dadurch bleibt dem TokenAndPermUserStore Cachegröße unter Grenzen.
  • Umbrechen von ad-hoc-Abfragen in gespeicherten Prozeduren und gespeicherte Prozeduren anstatt direkt ad-hoc-Abfragen verwenden.


    Hinweise
    • Ausführungspläne werden Aussagen zwischengespeichert, die in der gespeicherten Prozedur.
    • Der TokenAccessResult-Eintrag für jede Anweisung ist Execution Plan Eintrag zugeordnet.
    • Als Ausführungsplan für diese Prozedur bleibt im Cache gespeichert, verwendet jeder Ausführung der gespeicherten Prozedur wirksam TokenAccessResult Einträge. Daher müssen Sie keinen neuen TokenAccessResult erstellen.
  • Aktivieren Sie die Option FORCE_PARAMETERIZATION.

    Hinweise
    • Diese Methode können Sie ihre Pläne und ad-hoc-Abfragen effizient wiederverwenden.
    • Wenn Sie diese Methode verwenden, müssen Sie keinen TokenAccessResult Eintrag jedes Mal erstellen, die ad-hoc-Abfrage mit verschiedenen Parametern ausgeführt.
    • Dadurch bleibt dem TokenAndPermUserStore Cachegröße unter Grenzen.
  • Fügen Sie die Anmeldung führt ad-hoc-Abfragen als Mitglied der Gruppe Sysadmin Server unterschiedlich.

    Hinweise
    • TokenAccessResult Einträge werden bei Ausführung der Abfrage durch eine Anmeldung, die nicht Mitglied der Gruppe Sysadmin Server ist nur für eine ad-hoc-Abfrage erstellt.
    • Da TokenAccessResult Einträge nicht erstellt werden, bleibt dies die TokenAndPermUserStore Cachegröße verwaltbar.
  • Aus dem TokenAndPermUserStore-Cache zu leeren.

    Hinweise
    • Führen Sie hierzu den folgenden Befehl aus:
      DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')
    • Idealerweise sollten versuchen Sie, den Schwellenwert von dem TokenAndPermUserStore Cachegröße überwachen, wenn Probleme erscheinen.
    • Sie können einen geplanten SQL Server-Agent-Auftrag erstellen, der folgenden Aktionen ausführt:
      • Überprüfen Sie die Größe des Cache TokenAndPermUserStore. Führen Sie hierzu den folgenden Befehl aus:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS    "CurrentSizeOfTokenCache(kb)" 
        FROM sys.dm_os_memory_clerks
        WHERE name = 'TokenAndPermUserStore'
      • Wenn die Cache-Größe größer als der Schwellenwert, die Sie beobachtet ist, führen Sie den folgenden Befehl ein:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Referenzen

Klicken Sie für weitere Informationen auf die folgenden Artikelnummern, um die betreffenden Artikel in der Microsoft Knowledge Base anzuzeigen:

933564 beheben: eine stetige Zunahme bei Speicherbedarf Cachespeicher USERSTORE_TOKENPERM tritt in SQL Server 2005

959823 wie das Kontingent für den TokenAndPermUserStore-Cache-Speicher in SQL Server 2005 Service Pack 3 Anpassen

Eigenschaften

Artikelnummer: 927396 – Letzte Überarbeitung: 14.01.2017 – Revision: 1

Feedback