徵狀

假設您在應用程式中使用 sqlncli11 ODBC 驅動程式來存取 Microsoft SQL Server 2012 或 SQL Server 2014。 當您使用伺服器游標與 SQLFetch/ SQLGETDATA 函數存取 SQL server 中的一些二進位大型物件(BLOB)資料時,特別是對於較大的資料類型(例如 Varbinary (max)或 Varchar (max)),會發生效能問題。

原因

這是在 SQL Server 2012 ODBC 驅動程式中實現 SQLFetch/ SQLGetData 函數的設計問題。 當查詢使用任何伺服器游標時,ODBC 驅動程式會在SQLFetch實現期間調用sp_cursorfetch ,而伺服器會將所有的 BLOB 傳送給用戶端。 然後,在 SQLGetData 執行時, sp_cursor 會再次產生所有 BLOB。 這會大大影響大型資料類型(例如 Varbinary (max)或 Varchar (max))的效能。

解決方案

累積更新資訊

新的實現會執行sp_cursoroption ,以取得sp_cursorfetch之前的 TEXTPTR_ONLY,然後在sp_cursor之前調用sp_cursoroption將它放回 TEXTDATA。 這樣可以改善效能。此問題最初是在 SQL Server 的後續累積更新中修正。

每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 我們建議您下載並安裝最新的 SQL Server 累積更新:

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×