查詢要花較長時間來完成時 TokenAndPermUserStore 快取的大小會增大 SQL Server 2005 中執行

文章翻譯 文章翻譯
文章編號: 927396 - 檢視此文章適用的產品。
Bug #: 429501 (SQLBUDT)
全部展開 | 全部摺疊

在此頁中

徵狀

在 Microsoft SQL Server 2005 中,您可能會遭遇下列徵狀:
  • 通常執行速度較快的查詢要花費較長時間才能完成執行。
  • SQL Server 處理序的 CPU 使用率是多個一般。
  • 當執行臨機操作查詢時,您會遭遇效能降低時, 您會檢視從 sys.dm_exec_requestssys.dm_os_waiting_tasks 動態管理檢視查詢。不過,查詢不等待任何資源。
  • TokenAndPermUserStore 快取存放區的大小會增大以穩定的速度。
  • TokenAndPermUserStore 快取存放區的大小是中的順序數百 MB 為單位)。
  • 在某些情況下執行 DBCC FREEPROCCACHE 命令會提供暫存洩壓。
若要監視 TokenAndPermUserStore 快取的大小,您可以使用類似下列的查詢:
SELECT SUM(single_pages_kb + multi_pages_kb) AS 
   "CurrentSizeOfTokenCache(kb)" 
   FROM sys.dm_os_memory_clerks 
   WHERE name = 'TokenAndPermUserStore'

發生的原因

TokenAndPermUserStore 快取存放維護以下安全性語彙基元型別:
  • LoginToken
  • TokenPerm
  • UserToken
  • SecContextToken
  • TokenAccessResult。
不同類別的 TokenAccessResult 項目也會出現。有 65535 的類別的許多 TokenAccessResult 項目都存在,就會發生此特定問題。

具有率高隨機的動態查詢執行的 SQL Server 的實例您注意到大量 TokenAccessResult sys.dm_os_memory_cache_entries 檢視中有 65535 的類別的項目。TokenAccessResult 有 65535 的類別的項目代表特殊的快取項目。這些快取項目用於查詢的累積的使用權限檢查。比方說,您可能執行下列查詢:
select * 
from t1 join t2 join t3
SQL Server 在這種情況下計算此查詢的累積權限檢查。這項檢查會判斷使用者是否具有在 t1、 t2、 t3 的選取。這些累積權限] 核取結果內嵌至一個 TokenAccessResult 項目,並插入到 TokenAndPermUserStore 快取存放 65535 的識別碼。如果相同的使用者會重複使用,或多次執行這個查詢,SQL Server 重新使用 TokenAccessResult 快取項目一次。

當此快取儲存區增大時,來搜尋重複使用現有的項目時間不斷增加。 此快取的存取被控制,以便只有一個執行緒可以執行搜尋。這種行為最後原因查詢效能,以減少,及更多的 CPU 使用率,就會發生。

解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack 的 SQL Server 2005。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
913089如何取得最新的 Service Pack,SQL Server 2005 的
如果要解決這個問題,SQL Server 2005 Service Pack 2 會變更權限語彙基元快取的行為。預設情況下,TokenAccessResult 安全性快取項目,對於臨機操作查詢是只時快取一次執行特定的臨機操作查詢。

其他可行方案

要解決這個問題,使用一或多個下列方法:
  • 明確地參數化臨機操作查詢。

    備忘稿
    • 這個方法可讓您有效地重複使用臨機操作查詢和其計劃。
    • 當您使用這個方法時,您沒有建立 TokenAccessResult 項目每次執行臨機操作查詢搭配不同參數。
    • 使用這個方法,快取會保留在合理的限制下 TokenAndPermUserStore 大小。
  • 臨機操作查詢預存程序內自動換行,並直接執行臨機操作查詢的使用預存程序。

    備忘稿
    • 執行計劃會快取中預存程序的陳述式。
    • 每個陳述式 TokenAccessResult 項目會與執行計劃項目產生關聯。
    • 只要執行計劃,這會儲存在快取中的程序會保持,重新使用有效地使用預存程序的每個執行,TokenAccessResult 項目。因此,您不需要建立新的 TokenAccessResult 項目。
  • 啟用 FORCE_PARAMETERIZATION 資料庫選項。

    備忘稿
    • 這個方法可讓您有效地重複使用臨機操作查詢和其計劃。
    • 當您使用這個方法時,您沒有建立 TokenAccessResult 項目每次執行臨機操作查詢搭配不同參數。
    • 使用這個方法,快取會保留在合理的限制下 TokenAndPermUserStore 大小。
  • 新增登入來執行各種臨機操作查詢張為系統管理員 (sysadmin) 伺服器群組的成員。

    備忘稿
    • 對於臨機操作查詢只建立 TokenAccessResult 項目,不是系統管理員 (sysadmin) 伺服器群組的成員的登入所執行查詢時。
    • 因為不建立 TokenAccessResult 項目,這種行為會將 TokenAndPermUserStore 快取大小保持管理的大小。
  • 排清從 TokenAndPermUserStore 快取的項目。

    備忘稿
    • 若要執行此動作執行下列命令:
      DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')
    • 在理想的情況下,嘗試觀賞 TokenAndPermUserStore 快取大小的臨界值,當問題開始出現。
    • 您可以建立已排程的 SQL Server 代理程式工作,執行下列動作:
      • 檢查 TokenAndPermUserStore 快取大小的大小。若要執行此動作執行下列命令:
        SELECT SUM(single_pages_kb + multi_pages_kb) AS 
           "CurrentSizeOfTokenCache(kb)" 
           FROM sys.dm_os_memory_clerks 
           WHERE name = 'TokenAndPermUserStore'
      • 如果快取大小超出了您觀察到的閾值,執行下列命令:
        DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')

?考

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
933564FIX: USERSTORE_TOKENPERM 快取存放的記憶體耗用量的逐漸增加發生於 SQL Server 2005 中
959823如何自訂的 SQL Server 2005 Service Pack 3 中 [TokenAndPermUserStore 快取儲存區配額

屬性

文章編號: 927396 - 上次校閱: 2009年7月28日 - 版次: 4.0
這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbtshoot kbinfo kbsql2005tsql kbprb KB927396 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:927396
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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