FIX: Performance issue occurs when you use sqlncli11.dll ODBC driver to access SQL Server in an application
Assume that you use a sqlncli11.dll ODBC driver to access Microsoft SQL Server 2012 or SQL Server 2014 in an application. When you use server cursor and the SQLFetch/ SQLGetData function to access some binary large object (BLOB) data in SQL Server, a performance issue occurs especially for large data types like varbinary (max) or varchar (max).
This is a design issue for implementation of the SQLFetch/ SQLGetData function in SQL Server 2012 ODBC driver. When the query uses any server cursors, the ODBC driver invokes sp_cursorfetch during the SQLFetch implementation, and the server sends all the BLOB to the client. Then, when SQLGetData is executed, sp_cursor brings all the BLOB again. This greatly affects the performance for large data types like varbinary (max) or varchar (max).
Cumulative Update informationThe new implementation invokes sp_cursoroption to obtain TEXTPTR_ONLY before the sp_cursorfetch, and then invokes sp_cursoroption to put it back to TEXTDATA before the sp_cursor. This can improve the performance.
The issue was first fixed in the following cumulative update of SQL Server.
- Cumulative Update 1 for SQL Server 2014 SP1
- Cumulative Update 7 for SQL Server 2014
- Cumulative Update 5 for SQL Server 2012 SP2
Each new cumulative update for SQL Server contains all the hotfixes and all the security fixes that were included with the previous cumulative update. We recommend that you download and install the latest cumulative updates for SQL Server:
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
Article ID: 3041859 - Last Review: 06/22/2015 14:26:00 - Revision: 3.0
Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Service Pack 1
- kbqfe kbfix kbsurveynew kbexpertiseadvanced KB3041859