Příznaky
Předpokládejme, že pro přístup k Microsoft SQL serveru 2012 nebo SQL Server 2014 v aplikaci používáte ovladač ODBC sqlncli11. dll. Při použití kurzoru serveru a funkce SQLFetch/ SQLGetData k získání přístupu k některým binárním datům rozsáhlého objektu (BLOB) na serveru SQL Server dochází k problému s výkonem, který je obzvláště pro velké datové typy, jako je třeba (max) nebo varchar (max).
Příčina
Jedná se o problém s návrhem pro implementaci funkce SQLFetch/ SQLGETDATA v ovladači SQL Server 2012 ODBC. Když dotaz používá libovolné serverové kurzory, ovladač ODBC vyvolá sp_cursorfetch během implementace SQLFetch a server pošle všem objektům blob klientovi. Po SQLGetDatasp_cursor se pak znovu převede celý objekt BLOB. To významně ovlivňuje výkon pro velké datové typy, jako je varbinary (max) nebo varchar (max).
Řešení
Informace o kumulativní aktualizaci
Nová implementace vyvolá sp_cursoroption pro získání TEXTPTR_ONLY před sp_cursorfetcha pak vyvolá SP_CURSOROPTION pro jeho vrácení do TextData před sp_cursor. Tím se zlepší výkon. Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Doporučujeme stáhnout a nainstalovat nejnovější kumulativní aktualizace pro SQL Server:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.