文章編號: 933564 - 上次校閱: 2010年4月28日 - 版次: 3.0

FIX: USERSTORE_TOKENPERM 快取存放的記憶體耗用量的逐漸增加發生於 SQL Server 2005 中

可以下載 Hotfix下載 Hotfix
檢視和要求下載 hotfix
系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
錯誤: # 50000945 (SQL Hotfix)
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2005 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。

在此頁中

全部展開 | 全部摺疊

結論

本文將告訴您下列關於此 Hotfix 版本:
  • 此 Hotfix 套件所修正的問題
  • 套用 Hotfix 套件的先決條件
  • 是否您必須重新啟動電腦套用 Hotfix 套件之後,
  • 是否 Hotfix 套件就會取代任何其他 Hotfix 套件
  • 套用 Hotfix 套件之後,您必須是否做任何登錄變更
  • 包含在 Hotfix 套件中的檔案

徵狀

當 Microsoft SQL Server 2005 正在執行的自訂應用程式使用觸發程序經常資料庫保護時間戳記變更 USERSTORE_TOKENPERM 快取存放的記憶體耗用量的逐漸增加,就會發生的功能。此外,許多重複的 TokenAccessResult 項目中 sys.dm_os_memory_cache_entries 動態管理檢視有 65535 的類別。

如需有關問題,以及有關導致保護資料庫的時間戳記變更的條件的詳細資訊,請參閱 < 其他相關資訊 > 一節。

發生的原因

查詢的累計的權限檢查存放在 USERSTORE_TOKENPERM 快取存放區中為 TokenAccessResult 項目具有 65535 的類別,就會發生這個問題。TokenAccessResult 項目使用保護時間戳記來判斷是否發生安全性變更,會使失效快取項目。 重複保護時間戳記變更,每次舊的快取項目無法使用因為舊的項目可能不是目前。 因此,必須插入新的快取項目。不過,舊項目不會移除直到 SQL Server 遭遇記憶體壓力。 這個問題可能會導致記憶體耗用量增加 USERSTORE_TOKENPERM 快取存放區。

解決方案

版本資訊

SQL Server 2005 Service Pack 3 中修正這個問題。如需有關如何取得 SQL Server 2005 Service Pack 3,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
913089? (http://support.microsoft.com/kb/913089/ ) 如何取得最新的 Service Pack,SQL Server 2005 的

Hotfix 資訊

Microsoft 提供支援的 Hotfix。不過,此 Hotfix 旨在修正本文中所述隨問題。請您僅在遇到本文所述問題的系統上安裝這個 Hotfix。這個 Hotfix 可能會接受額外的測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個包含此 Hotfix 的軟體更新。

如果此 Hotfix 可供下載,您可在本知識庫文件的頂端找到「 可用的 Hotfix 下載 」區段。如果本節 Does Not Appear 請連絡[ Microsoft 客戶服務 ] 和 [ 支援 ] 以取得此 Hotfix。

附註如果發生其他問題,或如果需要任何疑難排解,您可能必須建立個別的服務要求。和此 Hotfix 無關的額外支援問題適用一般的支援費用。如需 Microsoft 客戶服務支援部門電話號碼的完整清單或要建立個別的服務要求,請造訪下列 Microsoft 網站:
http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)
附註「 下載 Hotfix 」 表單會顯示此 Hotfix 會出現,以供使用的語言。如果您沒有看到您的語言,是因為此 Hotfix 是不適用您的語言。

必要條件

您必須有 Microsoft SQL Server 2005 Service Pack 2 (SP2) 來套用這個 Hotfix 安裝。

如需有關如何取得 SQL Server 2005 Service Pack 2 的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
913089? (http://support.microsoft.com/kb/913089/ ) 如何取得最新的 Service Pack,SQL Server 2005 的

重新啟動資訊

您沒有套用此 Hotfix 之後重新啟動電腦。

登錄資訊

您沒有變更登錄。

Hotfix 檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 並未包含必須將產品完整更新至最新版組建的所有檔案。

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間 中項目控制台中的 [時區] 索引標籤]。
SQL Server 2005 32 位元版本
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Microsoft.sqlserver.maintenanceplantasks.dll9.0.3153.0296,3042007 年三月 08 日00: 38x86
Msmdlocal.dll9.0.3153.015,930,2242007 年三月 08 日00: 38x86
Sqlaccess.dll2005.90.3153.0350,5762007 年三月 08 日00: 38x86
Sqlservr.exe2005.90.3153.029,190,5122007 年三月 08 日00: 38x86
SQL Server 2005 64 位元版本
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Microsoft.sqlserver.maintenanceplantasks.dll9.0.3153.0296,3042007 年三月 08 日00: 38x86
Msmdlocal.dll9.0.3153.015,930,2242007 年三月 08 日00: 38x86
Sqlaccess.dll2005.90.3153.0357,7442007 年三月 08 日10: 53x86
Sqlservr.exe2005.90.3153.038,638,9602007 年三月 08 日10: 53x64

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

您可以使用下列兩個查詢以判斷您是否遇到這個問題。
  • 當您在執行以下的查詢您會發現該記憶體耗用量由 USERSTORE_TOKENPERM 快取增加:
    select sum(single_pages_kb+multi_pages_kb) 'total memory for tokenperm' from sys.dm_os_memory_clerks where type = 'USERSTORE_TOKENPERM'
  • 當您在執行以下的查詢在 [郵件檔地址] 欄中,以及 [識別碼] 欄位中收到多項目:
    select [Store Address], [id], count (*) 'number of entries'
    from  
    	(select 
    		 cast(entry_data as xml).value ('(//@store_address)[1]', 'varchar (100)') as [Store Address],
    		 cast(entry_data as xml).value ('(//@id)[1]', 'bigint') as [id]
    		 from sys.dm_os_memory_cache_entries
    		where type = 'USERSTORE_TOKENPERM' and cast(entry_data as xml).value ('(//@name)[1]', 'varchar (100)') = 'TokenAccessResult' and 
    			cast(entry_data as xml).value('(//@class)[1]', 'bigint') = 65535
    	) R 
    group by [Store Address], [id] 
    having count (*) > 1
    order by count (*) desc
    
    如果此查詢所產生的結果都沒有您沒有遭遇本文將告訴您這個問題。
許多條件式改變資料庫保護時間戳記。比方說大部分的資料定義語言 (DDL) 作業變更保護時間戳記。

建立資料表 DDL 作業和暫存資料表在 卸除資料表 DDL 作業會變更保護時間戳記,tempdb 資料庫中。

以下 DDL 作業是在 Transact-SQL 陳述式。這些作業變更 master 資料庫中的保護時間戳記:
  • 建立登入
  • 變更登入
  • 卸除登入
  • 建立端點
  • 改變結束點
  • 卸除端點
以下 DDL 作業與相關 資料表 物件如 [使用者] 物件。這些作業變更任何資料庫中的保護時間戳記。這些資料庫包括主資料庫以及 tempdb 資料庫。
  • 建立
  • 改變
  • 卸除
以下 DDL 作業與安全性相關。所有安全性相關的作業都變更任何資料庫中的保護時間戳記。這些資料庫包括主資料庫以及 tempdb 資料庫。下列清單命名安全性相關的 DDL 作業的一些範例。
  • 建立
  • 改變
  • 卸除使用者
  • 角色
  • 應用程式角色
  • 憑證
  • 結構描述
  • 對稱金鑰
  • 非對稱金鑰
此外,授與、 撤銷,或拒絕物件的權限的作業是與安全性相關。這些作業也會變更任何資料庫中的保護時間戳記。這些資料庫包括主資料庫以及 tempdb 資料庫。

其他條件也可能會造成 USERSTORE_TOKENPERM 快取成長經過一段時間。 本文將告訴您,此修正程式是非常特定的條件。也就是保護時間戳記的變更會導致快取儲存區增大。如需有關 USERSTORE_TOKENPERM 快取,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
927396? (http://support.microsoft.com/kb/927396/ ) 臨機操作查詢要花較長時間來完成時 TokenAndPermUserStore 快取的大小會增大 SQL Server 2005 中執行
安裝此 Hotfix 之後,名為 時間戳記 的新屬性便會加入至 entry_data sys.dm_os_memory_cache_entries 檢視中的資料行。 此屬性指定的 SQL Server 會檢查每一個計劃的權限的次數。 當計劃新編譯或重新編譯時,時間戳記是 1。 如果保護時間戳記會變更,則會重新計算此值。 You can use the following query to take snapshots of the timestamp:
select [store_address], [timestamp], count (*) 'number of entries'  from  
	(select 
 cast(entry_data as xml).value ('(//@store_address)[1]', 'varchar(100)')  as store_address ,
case cast(entry_data as xml).value ('(//@timestamp)[1]', 'int') when  1 then 1 
		else  null 
		end as [timestamp]
		 from sys.dm_os_memory_cache_entries
		where type = 'USERSTORE_TOKENPERM' and cast(entry_data as xml).value ('(//@name)[1]', 'varchar (100)') = 'TokenAccessResult' and 
			cast(entry_data as xml).value('(//@class)[1]', 'bigint') = 65535
	) R 
group by [store_address], [timestamp]
order by count (*) desc
If over time you see many timestamps of 1 for each store_address column, an application has a high rate of ad hoc queries or of recompile operations.您必須減緩或重新編譯作業的臨機操作查詢的速度。 或者,您可以藉由套用追蹤旗標來限制個別使用者快取存放區的項目數 4618 來解決這個問題。 使用追蹤旗標 4618 可以造成小 CPU 負荷因為此追蹤旗標會移除舊的快取項目,如插入新項目。追蹤旗標會執行快取存放區成長大小限制這個動作。 不過,CPU 負荷會分配經過一段時間。

其他相關資訊

如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
959823? (http://support.microsoft.com/kb/959823/ ) 如何自訂的 SQL Server 2005 Service Pack 3 中 [TokenAndPermUserStore 快取儲存區配額
如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
824684? (http://support.microsoft.com/kb/824684/ ) 用來描述 Microsoft 軟體更新標準術語的說明

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
關鍵字:?
kbmt kbautohotfix kbqfe kbhotfixserver kbsql2005engine kbprb KB933564 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:933564? (http://support.microsoft.com/kb/933564/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。