FIX: Performance issue occurs when you use sqlncli11.dll ODBC driver to access SQL Server in an application

S'aplica a: SQL Server 2012 DeveloperSQL Server 2012 EnterpriseSQL Server 2012 Standard Més

Symptoms


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).

Cause


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).

Resolution


Cumulative Update information

The 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.

Status


Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.