KB2649913 - 修正:從 SQL Server 2005 升級至 SQL Server 2008 或升級至 SQL Server 2008 R2 或 SQL Server 2012 之後,當您執行使用 sp_cursoropen 預存程序的查詢時,效能可能會降低

Applies To
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Express with Advanced Services SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 Express with Advanced Services SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard

Microsoft 會以一個可下載的檔案發行 Microsoft SQL Server 2008 R2 Service Pack 1 (SP) 1 或 Microsoft SQL Server 2012 修正程式。 由於是累積修正程式,因此每個新版本都包含先前的 SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012 更新版本中包含的所有 Hotfix 和所有安全性更新。

症狀

請考慮以下案例:

  • 您從 Microsoft SQL Server 2005 升級至 Microsoft SQL Server 2008、Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012。
  • 您執行使用 sp_cursoropen 預存程序的查詢,然後指定 rowcount 參數來擷取資料表的前幾個資料列。

在此案例中,效能可能會比在 SQL Server 2005 中執行相同的查詢還要慢。

原因

發生此問題的原因是查詢最佳化工具使用靜態資料指標計畫,而非動態資料指標計畫。 如果是靜態游標計劃,SQL Server 會擷取所有資料列,並將它們插入游標工作資料表中。 不過,針對動態資料指標計劃,SQL Server 只會擷取所需的資料列。

解決方式

累積更新資訊

SQL Server 2012

此問題的修正程式最初在 SQL Server 2012 的累積更新 1 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2679368 SQL Server 2012 累積更新套件 1 注意 由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些修正程式隨附於上一個 SQL Server 2012 修正程式版本。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2692828 SQL Server 2012 發行之後所發行的 SQL Server 2012 組建 您必須將 SQL Server 2012 Hotfix 套用至 SQL Server 2012 的安裝。

SQL Server 2008 R2 SP1 的累積更新套件 5

套用此 Hotfix 之後,請啟用追蹤旗標 4199。

此問題的修正程式最初在累積更新 5 中發行。 如需有關如何取得 SQL Server 2008 R2 SP1 累積更新套件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

2659694 SQL Server 2008 R2 SP1 的累積更新套件 5 注意 由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和先前 SQL Server 2008 R2 SP1 修正程式版本中包含的所有安全性修正程式。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 SQL Server 2008 R2 SP1 發行之後所發行的 SQL Server 2008 R2 組建

因應措施

若要解決此問題,請將 FAST 查詢提示新增至查詢。

更多資訊

如需有關如何使用查詢提示的詳細資訊,請造訪下列 MSDN 網站:

關於如何使用查詢提示的一般資訊 如需有關追蹤旗標 4199 的詳細資訊,請造訪下列網站:

關於追蹤旗標 4199 的一般資訊

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。