KB3041859 - 修正:當您使用 ODBC 驅動程式存取應用程式中的SQL Server時 sqlncli11.dll 發生效能問題

套用到
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症狀

假設您使用 sqlncli11.dll 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_cursoroption 在sp_cursor之前將其放回 TEXTDATA。 這可改善效能。

此問題已先在下列 SQL Server 累積更新中修正。

建議:安裝最新的 SQL Server 累積更新

SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 我們建議您下載並安裝 SQL Server 的最新累積更新:

      

狀態

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