Síntomas
Supongamos que usa un controlador ODBC sqlncli11.dll para acceder a Microsoft SQL Server 2012 o SQL Server 2014 en una aplicación. Cuando utiliza el cursor del servidor y la función SQLFetch/ SQLGetData para tener acceso a algunos datos de objetos binarios grandes (BLOB) en SQL Server, se produce un problema de rendimiento, especialmente para tipos de datos grandes, como varbinary (max) o varchar (max).
Causa
Se trata de un problema de diseño para la implementación de la función SQLFetch/ SQLGetData en el controlador ODBC de SQL Server 2012. Cuando la consulta usa cursores de servidor, el controlador ODBC invoca sp_cursorfetch durante la implementación de SQLFetch y el servidor envía todos los blobs al cliente. Después, cuando se ejecuta SQLGetData, sp_cursor vuelve a traer todos los blobs. Esto afecta en gran medida al rendimiento de tipos de datos grandes, como varbinary (max) o varchar (max).
Resolución
Información sobre la actualización acumulativa
La nueva implementación invoca sp_cursoroption para obtener TEXTPTR_ONLY antes de la sp_cursorfetch y, después, invoca sp_cursoroption para volver a colocarlo en TEXTDATA antes del sp_cursor. Esto puede mejorar el rendimiento.
Este problema se corrigió por primera vez en la siguiente actualización acumulativa de SQL Server.
- Actualización acumulativa 1 para SQL Server 2014 SP1
- Actualización acumulativa 7 para SQL Server 2014
- Actualización acumulativa 5 para SQL Server 2012 SP2
Recomendación: instalar la actualización acumulativa más reciente para SQL Server
Cada nueva actualización acumulativa para SQL Server contiene todas las revisiones y correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Se recomienda descargar e instalar las actualizaciones acumulativas más recientes para SQL Server:
- Actualización acumulativa más reciente para SQL Server 2014 SP1
- Actualización acumulativa más reciente para SQL Server 2014
- Actualización acumulativa más reciente para SQL Server 2012 SP2
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".