徵兆
在同一個哈希貯體中同時插入過多專案,或是臨機 SQL Server 計劃快取達到其輸入限制 160,036 時,會發生嚴重SOS_CACHESTORE分鎖問題。 在這種情況下,Microsoft SQL Server 中會發生高 CPU 使用量。
原因
當 SQL Server 方案快取達到其進入限制,且成本低的方案必須被逐出才能插入新方案時,就會發生此問題。 這會造成SOS_CACHESTORE微調鎖的大量爭議,該 SQL Server 計劃快取的哈希表格貯體會進行同步處理。
解決方案
累積更新資訊
此問題已在下列 SQL Server 的累積更新中首次修正。
每個 SQL Server 的新累積更新都包含所有 Hotfix 以及先前累積更新隨附的所有安全性修正。 檢視 SQL Server 的最新累積更新:
其他相關資訊
計劃快取有兩個限制:總大小和所有方案的總數。 大小和項目計數限制如下列白皮書所述:
計劃快取可以保存的項目數量上限是貯體計數的四倍。 您可以執行下列查詢來驗證這項資訊:
select name, type, buckets_count
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
select name, type, pages_kb, entries_count
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
例如,在64位系統上,SQL Server方案快取的貯體數量為40,009。 因此,SQL Server 計劃快取內可容納的項目數量上限為 160,036。
如果您的工作負載使用不同的臨機查詢,此限制可能會成為瓶頸。 此 Hotfix 所做的變更會解決此情況。 安裝此 Hotfix 並使用啟動追蹤標幟 “-T 174” 啟用變更之後,64 位系統上的貯體計數會增加到 160,001。 計劃快取則最多可以保留 640,004 個方案。
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。