Problembeschreibung
Angenommen, Sie verwenden einen sqlncli11. dll-ODBC-Treiber für den Zugriff auf Microsoft SQL Server 2012 oder SQL Server 2014 in einer Anwendung. Wenn Sie den Servercursor und die SQLFetch/ SQLGetData -Funktion verwenden, um auf einige BLOB-Daten (Binary Large Object) in SQL Server zuzugreifen, tritt ein Leistungsproblem insbesondere bei umfangreichen Datentypen wie varbinary (max) oder varchar (max) auf.
Ursache
Hierbei handelt es sich um ein Entwurfsproblem für die Implementierung der SQLFetch/ SQLGetData -Funktion in SQL Server 2012-ODBC-Treiber. Wenn die Abfrageserver Cursor verwendet, ruft der ODBC-Treiber sp_cursorfetch während der SQLFetch -Implementierung auf, und der Server sendet das gesamte BLOB an den Client. Wenn SQLGetData ausgeführt wird, ruft sp_cursor dann das gesamte BLOB erneut auf. Dies wirkt sich erheblich auf die Leistung für große Datentypen wie varbinary (max) oder varchar (max) aus.
Fehlerbehebung
Informationen zur kumulativen Aktualisierung
Die neue Implementierung ruft sp_cursoroption auf, um TEXTPTR_ONLY vor dem sp_cursorfetchabzurufen, und ruft dann sp_cursoroption auf, um Sie vor dem sp_cursorwieder an TextData zu übersetzen. Dies kann die Leistung verbessern. Das Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Wir empfehlen, die neuesten kumulativen Updates für SQL Server herunterzuladen und zu installieren:
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.