Query richiedere pi¨ tempo per completare l'esecuzione quando la dimensione della cache TokenAndPermUserStore aumenta in SQL Server 2005

Traduzione articoli Traduzione articoli
Identificativo articolo: 927396 - Visualizza i prodotti a cui si riferisce l?articolo.
Bug #: 429501 (SQLBUDT)
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

In SQL Server 2005, Ŕ possibile riscontrare i seguenti sintomi:
  • Query che in genere eseguite pi¨ velocemente richiedere pi¨ tempo per completare l'esecuzione.
  • Utilizzo della CPU per il processo di SQL Server Ŕ pi¨ consueto.
  • Quando si verifica una riduzione delle prestazioni quando si esegue una query ad hoc, Ŕ possibile visualizzare la visualizzazione di gestione dinamica sys.dm_exec_requests o sys.dm_os_waiting_tasks la query. Tuttavia, la query non viene visualizzato per essere in attesa di tutte le risorse.
  • La dimensione dell'archivio cache TokenAndPermUserStore aumenta a una velocitÓ costante.
  • La dimensione di archivio di cache TokenAndPermUserStore Ŕ in ordine di centinaia megabyte (MB).
  • In alcuni casi, l'esecuzione del comando DBCC FREEPROCCACHE fornisce sicurezza temporaneo.
Per monitorare la dimensione della cache TokenAndPermUserStore, Ŕ possibile utilizzare una query simile al seguente:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

Cause

L'archivio di cache TokenAndPermUserStore gestisce i tipi di token di protezione seguenti:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Sono presenti anche diverse classi di voci TokenAccessResult. Questo problema specifico si verifica perchÚ sono presenti molte voci TokenAccessResult con una classe di 65535.

Su un'istanza di SQL Server che dispone di un elevato tasso di esecuzione di query dinamiche casuale, Ŕ possibile notare numerose voci TokenAccessResult con una classe di 65535 nella visualizzazione sys.dm_os_memory_cache_entries . Voci di TokenAccessResult che dispongono di una classe di 65535 rappresentano voci speciali della cache. Queste voci della cache vengono utilizzate per i controlli di cumulativo delle autorizzazioni per le query. Ad esempio, si pu˛ eseguire la query riportata di seguito:
select * 
from t1 join t2 join t3
in questo caso, SQL Server consente di calcolare un controllo di autorizzazione cumulativo per la query. Questo controllo determina se un utente ha selezionare t1, t2, t3. I risultati del controllo di autorizzazione cumulativo sono incorporati in una voce TokenAccessResult e vengono inseriti nell'archivio TokenAndPermUserStore cache con un ID di 65535. Se lo stesso utente riutilizza o si esegue la query pi¨ volte, SQL Server riutilizza la voce di cache TokenAccessResult una sola volta.

Quando questo archivio cache aumenta, aumenta il tempo di cercare le voci esistenti riutilizzare. L'accesso a questa cache Ŕ controllato in modo che un solo thread possa eseguire la ricerca. Questo comportamento eventualmente cause query riduzione delle prestazioni e si verifica pi¨ CPU.

Risoluzione

Informazioni sul Service pack

Per risolvere il problema, ottenere il service pack pi¨ recente per SQL Server 2005. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
913089Come ottenere il service pack pi¨ recente per SQL Server 2005
Per risolvere il problema, SQL Server 2005 Service Pack 2 modifica il comportamento della memorizzazione nella cache dei token di autorizzazione. Per impostazione predefinita, la voce di cache di protezione TokenAccessResult relativa a query ad hoc viene memorizzato nella solo cache quando una specifica query ad hoc viene eseguita nuovamente.

Workaround

Per risolvere questo problema, utilizzare uno o pi¨ dei seguenti metodi:
  • In modo esplicito parametrizzare le query ad hoc.

    note
    • Questo metodo consente di riutilizzare in modo efficace le query ad hoc e i piani.
    • Quando si utilizza questo metodo, non si dispone creare una voce di TokenAccessResult ogni volta che si esegue la query ad hoc con parametri diversi.
    • Con questo metodo, la dimensione del TokenAndPermUserStore cache rimane in ragionevole.
  • Query ad hoc all'interno di stored procedure di a capo e utilizzare stored procedure anzichÚ l'esecuzione diretta di query ad hoc.

    note
    • Piani di esecuzione vengono memorizzati nella cache per le istruzioni in stored procedure.
    • La voce di TokenAccessResult per ogni istruzione Ŕ associata alla voce del piano di esecuzione.
    • PurchÚ il piano di esecuzione per questa memorizzati procedura rimane nella cache, ogni esecuzione della stored procedure riutilizza in modo efficace le voci TokenAccessResult. Di conseguenza, non Ŕ necessario creare nuovo TokenAccessResult voci.
  • Attivare l'opzione di database FORCE_PARAMETERIZATION.

    note
    • Questo metodo consente di riutilizzare in modo efficace le query ad hoc e i piani.
    • Quando si utilizza questo metodo, non si dispone creare una voce di TokenAccessResult ogni volta che si esegue la query ad hoc con parametri diversi.
    • Con questo metodo, la dimensione del TokenAndPermUserStore cache rimane in ragionevole.
  • Aggiungere l'account di accesso che esegue diverse query ad hoc come membro del gruppo di server sysadmin.

    note
    • Voci TokenAccessResult vengono create solo per una query ad hoc quando la query viene eseguita da un account di accesso non Ŕ un membro del gruppo di server sysadmin.
    • PoichÚ non vengono create le voci TokenAccessResult, questo comportamento mantiene la dimensione della cache TokenAndPermUserStore a una dimensione gestibile.
  • Cancellare le voci dalla cache TokenAndPermUserStore.

    note
    • A tale scopo, eseguire il comando riportato di seguito:
      DBCC FREESYSTEMCACHE (TokenAndPermUserStore)
    • In teoria, tentare di controllare il limite di dimensione della cache TokenAndPermUserStore quando problemi iniziano a visualizzare.
    • ╚ possibile creare un processo SQL Server Agent pianificata che esegue le operazioni seguenti:
      • Verificare la dimensione della dimensione della cache TokenAndPermUserStore. A tale scopo, eseguire il seguente comando:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • Se la dimensione della cache Ŕ maggiore della soglia che Ŕ stato osservato, eseguire il seguente comando:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Riferimenti

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
933564FIX: Si verifica un aumento graduale di consumo di memoria per l'archivio di cache USERSTORE_TOKENPERM in SQL Server 2005
959823Come personalizzare la quota per l'archivio di cache TokenAndPermUserStore in SQL Server 2005 Service Pack 3

ProprietÓ

Identificativo articolo: 927396 - Ultima modifica: martedý 28 luglio 2009 - Revisione: 4.0
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi:á
kbmt kbtshoot kbinfo kbsql2005tsql kbprb KB927396 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 927396
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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