Abfragen dauern länger ausgeführt, wenn die Größe des Cache TokenAndPermUserStore in SQL Server 2005 wächst beenden

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 927396 - Produkte anzeigen, auf die sich dieser Artikel bezieht
# Fehler: 429501 (SQLBUDT)
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

In Microsoft SQL Server 2005 können Sie die folgenden Symptome auftreten:
  • Abfragen, die in der Regel schneller ausgeführt, dauern länger fertig ausgeführt.
  • CPU-Auslastung für den SQL Server-Prozess ist mehr als üblich.
  • Wenn verminderte Leistung, auftreten Wenn Sie eine ad-hoc-Abfrage ausführen, zeigen Sie die Abfrage aus der Verwaltung dynamischer Ansicht sys.dm_exec_requests oder sys.dm_os_waiting_tasks . Die Abfrage wird jedoch nicht auf eine beliebige Ressource warten werden angezeigt.
  • Die Größe des TokenAndPermUserStore-Cachespeicher wächst konstanter Geschwindigkeit auf.
  • Die Größe des TokenAndPermUserStore-Cachespeicher ist in der Reihenfolge der mehrere Hundert Megabyte (MB).
  • In einigen Fällen bietet die Ausführung des Befehls DBCC FREEPROCCACHE temporäre Relief.
Um die Größe des Cache TokenAndPermUserStore zu überwachen, können Sie eine Abfrage, die die folgenden ähnelt:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

Ursache

Der TokenAndPermUserStore-Cache-Speicher verwaltet die folgenden Security token-Typen:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Es sind auch verschiedene Klassen von TokenAccessResult Einträge vorhanden. Dieses spezielle Problem rührt viele TokenAccessResult-Einträge, die eine Klasse von 65535 vorhanden sind.

Auf einer Instanz von SQL Server mit eine hohe Rate zufällige dynamische Abfrageausführung, bemerken Sie viel TokenAccessResult Einträge, die eine Klasse von 65535 in der sys.dm_os_memory_cache_entries -Ansicht aufweisen. TokenAccessResult-Einträge, die eine Klasse von 65535 darstellen spezielle Cacheeinträge. Diese Einträge im Cache werden für kumulative Berechtigungsüberprüfungen für Abfragen verwendet. Sie können z. B. die folgende Abfrage ausführen:
select * 
from t1 join t2 join t3
in diesem Fall SQL Server eine Prüfung kumulative Berechtigung für diese Abfrage berechnet. Diese Überprüfung bestimmt, ob ein Benutzer wählen auf t1, t2, t3. Dieser kumulative Berechtigung Kontrollkästchen Ergebnisse werden in einen Eintrag TokenAccessResult eingebettet und werden in den TokenAndPermUserStore-Cache-Speicher mit einer Kennung von 65535 eingefügt. Wenn derselbe Benutzer wiederverwendet oder diese Abfrage mehrmals ausführt, verwendet SQL Server den Cacheeintrag TokenAccessResult ein einziges Mal wieder.

Wenn dieses Cache-Speichers zunimmt, steigt die Zeit, vorhandene Einträge wiederverwenden suchen. Der Zugriff auf diesen Cache wird gesteuert, so dass nur ein Thread die Suche durchführen kann. Schließlich Ursachen Abfrage dieses Verhalten Leistung zu verringern, und mehr CPU-Auslastung erfolgt.

Lösung

Informationen zu Service Packs

Installieren Sie das neueste Servicepack für SQL Server 2005, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
913089Beziehen der neuesten Service Packs für SQL Server 2005
Um dieses Problem zu beheben, ändert SQL Server 2005 Service Pack 2 das Zwischenspeicherungsverhalten des Permission-Token. Standardmäßig wird der TokenAccessResult Sicherheit Cacheeintrag für ad-hoc-Abfragen nur zwischengespeichert, wenn eine bestimmte ad-hoc-Abfrage erneut ausgeführt wird.

Abhilfe

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

    Notizen
    • Dieser Methode können Sie die ad-hoc-Abfragen und deren Pläne effektiv wiederverwenden.
    • Wenn Sie diese Methode verwenden, müssen Sie einen Eintrag TokenAccessResult jedes Mal erstellen, die Sie zusammen mit anderen Parametern die ad-hoc-Abfrage ausführen.
    • Mit dieser Methode die Größe der TokenAndPermUserStore Cache unter angemessenen beschränkt bleibt.
  • Ad-hoc-Abfragen innerhalb gespeicherter Prozeduren umbrochen, und gespeicherte Prozeduren anstatt direkt Ausführen von ad-hoc-Abfragen verwenden.

    Notizen
    • Ausführungspläne werden für die Anweisungen zwischengespeichert, die in der gespeicherten Prozedur sind.
    • Der TokenAccessResult-Eintrag für jede Anweisung ist mit der Ausführung Plan Eintrag verknüpft.
    • Solange der Ausführungsplan für diese Prozedur bleibt im Cache gespeichert, verwendet jeder Ausführung der gespeicherten Prozedur effektiv die TokenAccessResult-Einträge. Daher müssen Sie neue TokenAccessResult erstellen Einträge.
  • Aktivieren Sie die Datenbank FORCE_PARAMETERIZATION-Option.

    Notizen
    • Dieser Methode können Sie die ad-hoc-Abfragen und deren Pläne effektiv wiederverwenden.
    • Wenn Sie diese Methode verwenden, müssen Sie einen Eintrag TokenAccessResult jedes Mal erstellen, die Sie zusammen mit anderen Parametern die ad-hoc-Abfrage ausführen.
    • Mit dieser Methode die Größe der TokenAndPermUserStore Cache unter angemessenen beschränkt bleibt.
  • Fügen Sie der Benutzernamen, der ausgeführt wird, ad-hoc-Abfragen als Mitglied der Sysadmin-Servergruppe variiert.

    Notizen
    • TokenAccessResult-Einträge werden nur für eine ad-hoc-Abfrage erstellt, wenn die Abfrage von einem Benutzernamen ausgeführt wird, der nicht Mitglied der Sysadmin-Servergruppe ist.
    • Da die TokenAccessResult-Einträge nicht erstellt werden, bleibt dieses Verhalten die TokenAndPermUserStore-Cache-Größe auf eine verwaltbare Größe.
  • Einträge aus der TokenAndPermUserStore-Cache entleert.

    Notizen
    • Führen Sie hierzu den folgenden Befehl:
      DBCC-FREESYSTEMCACHE (TokenAndPermUserStore)
    • Im Idealfall versuchen Sie, überwachen den Schwellenwert für die Cachegröße TokenAndPermUserStore Beginn Probleme angezeigt werden.
    • Sie können eine geplante SQL Server Agent Auftrag erstellen, die die folgenden Aktionen ausführt:
      • Überprüfen Sie die Größe der die TokenAndPermUserStore-Cache-Größe. Führen Sie hierzu den folgenden Befehl:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • Wenn die Cachegröße größer als der Schwellenwert, die Sie beobachtet ist, führen Sie den folgenden Befehl:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Informationsquellen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
933564Update: Ein schrittweise Erhöhung der Speicherverbrauch für den Cache-Speicher des USERSTORE_TOKENPERM tritt in SQL Server 2005
959823Zum Anpassen des Kontingents für den TokenAndPermUserStore Cache-Speicher in SQL Server 2005 Service Pack 3

Eigenschaften

Artikel-ID: 927396 - Geändert am: Dienstag, 28. Juli 2009 - Version: 4.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
Keywords: 
kbmt kbtshoot kbinfo kbsql2005tsql kbprb KB927396 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 927396
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Kontaktieren Sie uns, um weitere Hilfe zu erhalten

Kontaktieren Sie uns, um weitere Hilfe zu erhalten
Wenden Sie sich an den Answer Desk, um professionelle Hilfe zu erhalten.