KB3041859 - DÜZELTME: Bir uygulamadaki SQL Server erişmek için sqlncli11.dll ODBC sürücüsü kullandığınızda performans sorunu oluşur

Uygulandığı Öğe
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

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.

Ö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:

      

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.