Microsoft 將 Microsoft SQL Server 2008 R2 發佈為一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 R2 修正程式版本中所包含的所有修復程式及所有安全性修正程式。
徵狀
請試想下列案例:
-
應用程式執行的查詢參照 Microsoft SQL Server 2008 和 Microsoft SQL Server 2008 R2 中的某些臨時資料表。 臨時資料表是在會話中建立,而不是在儲存過程中建立。
-
查詢方案已快取。
-
許多使用者在高度併發的環境中執行相同的查詢。例如,許多使用者使用執行下列查詢的應用程式:
create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go
在這種情況下,應用程式會遇到效能問題。注意: 如需如何識別這個問題的詳細資訊,請參閱「其他資訊」一節。
原因
發生這個問題的原因是,當查詢文字相同時,會將相同的查詢方案插入到每個使用者的相同雜湊桶中。當您將大量方案散列到同一個 bucket (也稱為雜湊鏈)時,在快取中查詢方案的時間會顯著增加,而且可能會發生效能問題。 此外,worker 執行緒也可能會遇到嚴重的 spinlock 爭用,而其他執行緒則會在這些工作執行緒不執行正確的排程程式時受到影響。
解決方案
注意: 目前僅提供 SQL Server 2008 R2 的更新。 針對 SQL Server 2008,請參閱「因應措施」一節以解決此問題。
累積更新資訊
SQL Server 2008 R2 Service Pack 1
此問題的修正程式是在 SQL Server 2008 R2 Service Pack 1 的累積更新1中第一次發行。如需如何取得此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2544793 SQL Server 2008 R2 Service Pack 1 的累積更新套件1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2567616 在發行 SQL Server 2008 R2 Service Pack 1 之後發行的 SQL Server 2008 R2 組建
SQL Server 2008 R2
此問題的修正程式是在累積更新7中第一次發行。如需有關如何取得 SQL Server 2008 R2 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2507770 SQL Server 2008 R2 的累積更新套件7 注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
981356 在發行 SQL Server 2008 R2 之後發行的 SQL Server 2008 R2 組建
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。
因應措施
若要在 SQL Server 2008 和 SQL Server 2008 R2 中解決這個問題,請將任何臨時資料表的參照移至內部的儲存程式。
其他相關資訊
如需如何建立及修改表格基礎的詳細資訊,請造訪下列 MSDN 網站:
如何建立及修改表格基礎Spinlock 爭用可以從 sys.dm_os_spinlock_stats 的動態管理檢視(DMV)中識別,在 SOS_CACHESTORE Spinlock 上具有高爭用率。若要找出這個問題,請執行如下所示的查詢:
select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount desc當您執行此查詢時,如果下列情況屬實,您可能會遇到效能問題:
-
此查詢會產生相同的查詢文字。
-
相同 bucketid 的計數很大。注意: 相同 bucketid 的大量計數通常是在1000。
-
查詢參照臨時資料表