Dotazy trvat déle na dokončení spuštění, když se zvětší velikost mezipaměti TokenAndPermUserStore na serveru SQL Server 2005

Chyba č: 429501 (SQLBUDT)
Chyba č: 429501 (sledování SQL vadu BU)BUG #: 64830 (Údržba obsahu)

Příznaky

V Microsoft SQL Server 2005 může zaznamenat následující příznaky:
  • Dotazy, které obvykle rychleji trvat déle na dokončení.
  • Využití procesoru pro proces serveru SQL je více než obvykle.
  • Můžete dojít k poklesu výkonu při spuštění ad hoc dotazu, zobrazí dotaz zobrazení dynamickou správu sys.dm_exec_requests nebo sys.dm_os_waiting_tasks . Dotaz však pravděpodobně není být čekání na libovolný zdroj.
  • Velikost mezipaměti úložiště TokenAndPermUserStore roste stabilním tempem.
  • Velikost mezipaměti úložiště TokenAndPermUserStore je podle několika set megabajtů (MB).
  • Provedení příkazu DBCC FREEPROCCACHE v některých případech poskytuje dočasné osvobození od dovozního cla.
Chcete-li sledovat velikost mezipaměti TokenAndPermUserStore, můžete použít dotaz podobný následujícímu:
SELECT SUM(single_pages_kb + multi_pages_kb) AS    "CurrentSizeOfTokenCache(kb)" 
FROM sys.dm_os_memory_clerks
WHERE name = 'TokenAndPermUserStore'

Příčina

Úložiště mezipaměti TokenAndPermUserStore udržuje typy tokenů zabezpečení folllowing:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult.
Různé třídy TokenAccessResult položky jsou také k dispozici. K problému dochází, protože jsou k dispozici mnoho TokenAccessResult položky, které nemají třídu 65535.


Na instanci serveru SQL Server s vysokou rychlostí provádění náhodných dynamické dotazu můžete si všimnout mnoho TokenAccessResult položky, které nemají třídu 65535 v sys.dm_os_memory_cache_entries zobrazení. TokenAccessResult položky, které nemají třídu 65535 představují zvláštní mezipaměť. Tyto položky mezipaměti jsou používány pro kontroly kumulativní oprávnění pro dotazy. Například může spustit následující dotaz:
select * from t1 join t2 join t3
V tomto případě SQL Server vypočítá kumulativní oprávnění zaškrtněte pro tento dotaz. Toto políčko určuje, zda má uživatel vybrat t1, t2, t3. Tyto výsledky kontroly kumulativní oprávnění jsou vloženy do položky TokenAccessResult a jsou vloženy do mezipaměti úložiště TokenAndPermUserStore s ID 65535. Pokud stejný uživatel opakovaně používá nebo provede tento dotaz vícekrát, SQL Server znovu použije položka mezipaměti TokenAccessResult jednou.

Když toto úložiště mezipaměti roste, zvyšuje čas hledání znovu použít existující položky. Přístup k této mezipaměti je řízena tak, aby pouze jeden podproces může provést hledání. Toto chování nakonec způsobí, že dotaz na snížení výkonnosti a dojde k další využití procesoru.

Řešení

Informace o aktualizaci Service pack

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro SQL Server 2005. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
913089 jak získat nejnovější aktualizaci service pack pro SQL Server 2005
Chcete-li vyřešit tento problém, SQL Server 2005 Service Pack 2 se změní chování ukládání do mezipaměti tokenů oprávnění. Ve výchozím ukryto pouze položka mezipaměti TokenAccessResult zabezpečení pro dotazy ad hoc při zvláštních ad hoc dotaz znovu.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jednu nebo více z následujících metod:
  • Explicitně parametrizaci dotazů ad hoc.

    Poznámky
    • Tato metoda umožňuje efektivně znovu použít dotazy ad hoc a jejich plány.
    • Pokud použijete tuto metodu, není nutné vytvářet pokaždé, když spustíte dotaz ad hoc spolu s jinými parametry TokenAccessResult položky.
    • Při použití této metody zůstává velikost mezipaměti TokenAndPermUserStore v přijatelných mezích.
  • Zalomit dotazy ad hoc v rámci uložené procedury a používat uložené procedury namísto přímo spuštění dotazů ad hoc.


    Poznámky
    • Provádění plánů jsou uloženy v mezipaměti pro příkazy, které jsou v uložené proceduře.
    • TokenAccessResult položky pro každý výkaz je přidružená položce plán spuštění.
    • Tak dlouho, dokud plán vykonání tohoto postupu zůstane uložen v mezipaměti, každé spuštění uložené procedury účinně opakovaně používá TokenAccessResult položky. Proto není nutné vytvořit nový TokenAccessResult položky.
  • Povolte možnost databáze FORCE_PARAMETERIZATION.

    Poznámky
    • Tato metoda umožňuje efektivně znovu použít dotazy ad hoc a jejich plány.
    • Pokud použijete tuto metodu, není nutné vytvářet pokaždé, když spustíte dotaz ad hoc spolu s jinými parametry TokenAccessResult položky.
    • Při použití této metody zůstává velikost mezipaměti TokenAndPermUserStore v přijatelných mezích.
  • Přidáte přihlášení, které provádí různé dotazy ad hoc členem skupiny serveru sysadmin.

    Poznámky
    • TokenAccessResult položky jsou vytvořeny pouze pro ad hoc dotaz při spuštění dotazu pomocí přihlášení, který není členem skupiny serveru sysadmin.
    • Vzhledem k tomu, že nejsou vytvořeny položky TokenAccessResult, toto chování ponechá velikost mezipaměti TokenAndPermUserStore na zvládnutelnou velikost.
  • Vyprázdní položky z mezipaměti TokenAndPermUserStore.

    Poznámky
    • Chcete-li to provést, spusťte následující příkaz:
      DBCC FREESYSTEMCACHE (TokenAndPermUserStore)
    • V ideálním případě zkuste sledovat prahová hodnota velikost mezipaměti TokenAndPermUserStore, když se začnou objevovat problémy.
    • Můžete vytvořit naplánovanou úlohu Agent serveru SQL Server, který provede následující akce:
      • Zkontrolujte velikost mezipaměti TokenAndPermUserStore. Chcete-li to provést, spusťte následující příkaz:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS    "CurrentSizeOfTokenCache(kb)" 
        FROM sys.dm_os_memory_clerks
        WHERE name = 'TokenAndPermUserStore'
      • Pokud velikost mezipaměti je větší než prahová hodnota, která je pozorována, spusťte následující příkaz:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

933564 oprava: postupné zvýšení spotřeby paměti pro úložiště mezipaměti USERSTORE_TOKENPERM dochází v SQL Server 2005

959823 jak přizpůsobit kvóty pro úložiště mezipaměti TokenAndPermUserStore v SQL Server 2005 Service Pack 3

Vlastnosti

ID článku: 927396 - Poslední kontrola: 14. 1. 2017 - Revize: 1

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

Váš názor