徵狀
如果在相同的雜湊桶中出現太多並行插入,或 ad hoc SQL Server 方案快取達到其專案限制160036,就會發生 SOS_CACHESTORE spinlock 的嚴重爭用情況。 在這種情況下,Microsoft SQL Server 中會發生較高的 CPU 使用量。
原因
當 SQL Server 方案快取達到其進入限制時,就會發生此問題,而且必須移回具有低成本的方案,才能插入新方案。 這會對 SOS_CACHESTORE spinlock 產生繁重的爭用,為 SQL Server 方案快取的雜湊表桶提供同步處理。
解決方案
累積更新資訊
此問題最初是在 SQL Server 的後續累積更新中修正。
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
其他相關資訊
方案快取有兩種限制:總大小與所有方案的總數。 下列白皮書將說明大小與專案數量限制:
方案快取所能保留的專案數目上限為: bucket 數的四倍。 您可以執行下列查詢來驗證這項資訊:
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 方案快取的 bucket 數為40009。 因此,在 SQL Server 方案快取中可容納的專案數目上限為160036。
如果您有使用不同特別查詢的工作負荷,這個限制可能會成為瓶頸。 此熱修復程式所做的變更會解決這種情況。 安裝此熱修復程式並使用啟動追蹤標誌 "-T 174] 來啟用變更之後,會將 bucket 計數增加至64位系統上的160001。 方案快取最多可容納640004個方案。
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。