Requêtes mettre plus de temps pour terminer l'exécution lorsque la taille du cache TokenAndPermUserStore augmente dans SQL Server 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 927396 - Voir les produits auxquels s'applique cet article
N° de bogue : 429501 (SQLBUDT)
Agrandir tout | Réduire tout

Sommaire

Symptômes

Dans Microsoft SQL Server 2005, vous pouvez rencontrer les problèmes suivants :
  • Les requêtes qui s'exécutent généralement plus rapidement prendre plus de temps pour terminer l'exécution.
  • Utilisation du processeur pour le processus SQL Server est plus courant.
  • Lorsque vous rencontrez baisse des performances lorsque vous exécutez une requête ad hoc, vous affichez la requête de la vue gestion dynamique sys.dm_exec_requests ou sys.dm_os_waiting_tasks . Toutefois, la requête ne semble pas être en attente de n'importe quelle ressource.
  • La taille de la banque de cache TokenAndPermUserStore augmente à une vitesse constante.
  • La taille de la banque de cache TokenAndPermUserStore est dans l'ordre de plusieurs centaines mégaoctets (Mo).
  • Dans certains cas, l'exécution de la commande DBCC FREEPROCCACHE fournit sûreté temporaire.
Pour surveiller la taille du cache TokenAndPermUserStore, vous pouvez utiliser une requête semblable au suivant :
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

Cause

La banque de cache TokenAndPermUserStore gère les types de jeton de sécurité suivant montre :
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Différentes classes d'entrées TokenAccessResult sont également présents. Ce problème se produit car de nombreuses entrées TokenAccessResult qui ont une classe de 65 535 sont présentes.

Sur une instance de SQL Server qui a un taux élevé d'exécution de requête dynamique aléatoire, vous remarquez de nombreuses entrées TokenAccessResult ayant une classe de 65535 dans l'affichage sys.dm_os_memory_cache_entries . Entrées TokenAccessResult ayant une classe de 65 535 représentent les entrées de cache spécial. Ces entrées du cache sont utilisées pour vérifications d'autorisations cumulatives pour des requêtes. Par exemple, vous pouvez exécuter la requête suivante :
select * 
from t1 join t2 join t3
dans ce cas, SQL Server calcule une vérification d'autorisation cumulé pour cette requête. Cette vérification détermine si un utilisateur a sélectionner t1, t2, t3. Ces résultats à cocher autorisations cumulatives sont incorporés dans une entrée TokenAccessResult et sont insérés dans la banque de cache TokenAndPermUserStore avec un ID de 65 535. Si le même utilisateur réutilise ou exécute cette requête plusieurs fois, SQL Server réutilise l'entrée de cache TokenAccessResult une seule fois.

Lorsque cette banque de cache augmente, le temps de rechercher des entrées existantes de réutiliser augmente. Accès à ce cache est contrôlé afin que seul un thread puisse effectuer la recherche. Ce comportement finalement causes interroger baisse des performances, et plus l'UC se produit.

Résolution

Informations sur le service pack

Pour résoudre ce problème, procurez-vous le dernier service pack pour SQL Server 2005. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
913089Comment obtenir le dernier pack service pour SQL Server 2005
Pour résoudre ce problème, SQL Server 2005 Service Pack 2 modifie le comportement mise en cache des jetons d'autorisations. Par défaut, l'entrée TokenAccessResult sécurité du cache pour les requêtes ad hoc est uniquement mis en cache lorsqu'une requête ad hoc spécifique est exécutée à nouveau.

Contournement

Pour contourner ce problème, appliquez une ou plusieurs des méthodes suivantes :
  • Paramétrer explicitement les requêtes ad hoc.

    Notes
    • Cette méthode vous permet d'efficacement réutiliser leurs plans de requêtes ad hoc et.
    • Lorsque vous utilisez cette méthode, vous ne devez pas créer une entrée TokenAccessResult chaque fois que vous exécutez la requête ad hoc avec différents paramètres.
    • Avec cette méthode, la taille de TokenAndPermUserStore cache reste sous limites raisonnables.
  • Encapsuler les requêtes ad hoc dans des procédures stockées et utiliser des procédures stockées au lieu d'exécuter directement des requêtes ad hoc.

    Notes
    • Plans d'exécution sont mis en cache pour les instructions qui figurent dans la procédure stockée.
    • L'entrée TokenAccessResult pour chaque instruction est associée à l'entrée de plan d'exécution.
    • Tant que le plan d'exécution de cette stockée procédure reste dans le cache, chaque exécution de la procédure stockée réutilise efficacement les entrées TokenAccessResult. Par conséquent, vous ne devrez pas créer TokenAccessResult nouvel entrées.
  • Activer l'option de base de données FORCE_PARAMETERIZATION.

    Notes
    • Cette méthode vous permet d'efficacement réutiliser leurs plans de requêtes ad hoc et.
    • Lorsque vous utilisez cette méthode, vous ne devez pas créer une entrée TokenAccessResult chaque fois que vous exécutez la requête ad hoc avec différents paramètres.
    • Avec cette méthode, la taille de TokenAndPermUserStore cache reste sous limites raisonnables.
  • Ajouter la connexion qui exécute diverses requêtes ad-hoc tant que membre du groupe de serveur sysadmin.

    Notes
    • TokenAccessResult entrées sont créées uniquement pour une requête ad hoc lorsque la requête est exécutée par une connexion d'accès qui n'est pas membre du groupe de serveur sysadmin.
    • Étant donné que les entrées TokenAccessResult ne sont pas créées, ce comportement conserve la taille du cache TokenAndPermUserStore à un niveau gérable.
  • Entrées du cache TokenAndPermUserStore le vidage.

    Notes
    • Pour ce faire, exécutez la commande suivante :
      DBCC FREESYSTEMCACHE (TokenAndPermUserStore)
    • Dans l'idéal, essayez de regarder le seuil de la taille du cache TokenAndPermUserStore lorsque des problèmes commencent à apparaître.
    • Vous pouvez créer un travail SQL Server Agent planifiée qui exécute les actions suivantes :
      • Vérifiez la taille de la taille du cache TokenAndPermUserStore. Pour ce faire, exécutez la commande suivante :
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • Si la taille du cache est plus grande que le seuil vous observé, exécutez la commande suivante :
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
933564CORRECTIF : Une augmentation progressive de la consommation de mémoire pour la banque de cache USERSTORE_TOKENPERM se produit dans SQL Server 2005
959823Comment personnaliser le quota pour la banque de cache TokenAndPermUserStore dans SQL Server 2005 Service Pack 3

Propriétés

Numéro d'article: 927396 - Dernière mise à jour: mardi 28 juillet 2009 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbmt kbtshoot kbinfo kbsql2005tsql kbprb KB927396 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 927396
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com