Belirtiler
Bir uygulamada Microsoft SQL Server 2012 veya SQL Server 2014'e erişmek için sqlncli11.dll bir ODBC sürücüsü kullandığınızı varsayalım. SQL Server'de bazı ikili büyük nesne (BLOB) verilerine erişmek için sunucu imlecini ve SQLFetch/ SQLGetData işlevini kullandığınızda, özellikle varbinary (max) veya varchar (max) gibi büyük veri türleri için bir performans sorunu oluşur.
Neden
Bu, SQL Server 2012 ODBC sürücüsünde SQLFetch/ SQLGetData işlevinin uygulanması için bir tasarım sorunudur. Sorgu herhangi bir sunucu imlecini kullandığında, ODBC sürücüsü SQLFetch uygulaması sırasında sp_cursorfetch çağırır ve sunucu tüm BLOB'u istemciye gönderir. Daha sonra, SQLGetData yürütüldüğünde, sp_cursor tüm BLOB'u yeniden getirir. Bu, varbinary (max) veya varchar (max) gibi büyük veri türlerinin performansını büyük ölçüde etkiler.
Çözüm
Toplu Güncelleştirme bilgileri
Yeni uygulama, sp_cursorfetch önce TEXTPTR_ONLY almak için sp_cursoroption çağırır ve ardından sp_cursor önce TEXTDATA'ya geri koymak için sp_cursoroption çağırır. Bu, performansı artırabilir.
Sorun ilk olarak aşağıdaki toplu SQL Server güncelleştirmesinde düzeltilmiştir.
- SQL Server 2014 SP1 için Toplu Güncelleştirme 1
- Cumulative Update 7 for SQL ServerSQL Server 2014
- Cumulative Update 5 for SQL ServerSQL Server 2012 SP2
Öneri: SQL Server için en son toplu güncelleştirmeyi yükleyin
SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmeye dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmeleri indirip yüklemenizi öneririz:
- SQL Server 2014 SP1 için en son toplu güncelleştirme
- SQL Server 2014 için en son toplu güncelleştirme
- SQL Server 2012 SP2 için en son toplu güncelleştirme
Durum
Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.