Belirtiler

Transact-SQL'de uygulanan ve tek bir veri değeri döndüren User-Defined İşlevleri (UDF), T-SQL Skaler User-Defined İşlevleri (UDF) olarak bilinir. 

Microsoft SQL Server 2019, UDF yürütmesinin ana performans sorunu olduğu T-SQL Scalar UDF'lerini çağıran sorguların performansını geliştirebilen Scalar UDF Inlining özelliğini kullanıma sunulmuştur. T-SQL Scalar UDF Satır içi UDF'leri otomatik olarak ilişkisel ifadelere dönüştürür. 


Bu toplu güncelleştirme, Scalar UDF Inlining kullanan bir sorgunun hata veya beklenmeyen sonuçlar döndürebileceği senaryolar için aşağıdaki alanlarda çeşitli düzeltmeler içerir:

  • UDF'nin dönüş türü bir sql_variant ise tür uyuşmazlığı hatası (Microsoft SQL Server 2019 CU2'de eklendi)

  • sp_executesql'den UDF çağrısı yürütmeyi durdurur (Microsoft SQL Server 2019 CU2'de eklendi)

  • İlişkili BIR GOTO komutu olmadan etiketlere başvuran UDF'ler yanlış sonuçlar döndürdü (Microsoft SQL Server 2019 CU2'ye eklendi)

  • Çok büyük skaler UDF'ler nedeniyle yetersiz bellek koşulları ve bellek sızıntıları oluşuyor (Microsoft SQL Server 2019 CU2'ye eklendi)

  • Koşul (IF-ELSE) deyimlerinde kullanılan başlatılmamış değişkenler hatalara neden oluyor (Microsoft SQL Server 2019 CU2'ye eklendi)

  • UDF'nin SQL_VARIANT parametresi varsa açık dönüştürme hatası (Microsoft SQL Server 2019 CU7'de eklendi)

  • Skaler işlev CHECKSUM'a başvurduğunda hata oluştu (Microsoft SQL Server 2019 CU7'de eklendi)

  • Çok sayıda skaler ifadenin yeniden değerlendirmesiyle UDF çağrısı, verimsiz bir zamanlayıcı hatasına neden olabilir (Microsoft SQL Server 2019 CU7'de eklendi)

  • UDF başvuru sorgusu OPTION (RECOMPILE) kullandığında oluşan hata (Microsoft SQL Server 2019 CU7'de eklendi)

  • Görünümler, iç içe UDF'leri çağırdığında oluşan izin hataları (Microsoft SQL Server 2019 CU9'da eklendi)

  • XEvent query_tsql_scalar_udf_inlined kullanılırken oluşan erişim ihlalleri (Microsoft SQL Server 2019 CU9'da eklendi) 

  • Scalar UDF Inlining'in 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' sorgu ipucuna uymaması nedeniyle tutarsız davranış (Microsoft SQL Server 2019 CU9'da eklendi)

  • UDF'lerin çizilmesi, verimsiz zamanlayıcı hatasına neden olabilecek toplamalar içeriyor (Microsoft SQL Server 2019 CU9'da eklendi) 

  • Koşullu bloklarda aynı değişkende bir dizi skaler işlemden kaynaklanan bellek yetersiz hataları (Microsoft SQL Server 2019 CU9'da eklendi)

  • Bir nesne CU9'a yükselttikten sonra giriş parametresi olarak kullanılan skaler satır içi UDF (UDF2) ile skaler satır içi bir UDF (UDF1) çağırdığında erişim ihlali oluşabilir (Microsoft SQL Server 2019 CU11'de eklendi)

  • UDF'lerin eklenmesi 6846, 1011 ve 107 hata kodlarıyla hataya neden olabilir (Microsoft SQL Server 2019 CU11'de eklendi)

  • Sysadmin olmayan hesap olarak çalıştırılan UDF'lerin çizilmesi 'Geçerli komutta ciddi bir hata oluştu.  Varsa sonuçlar atılmalıdır' (Microsoft SQL Server 2019 CU16'da eklendi)

Bu toplu güncelleştirme, aşağıdaki senaryolarda da inlining'i engeller:

  • UDF, inlined (Microsoft SQL Server 2019 CU2'de eklendi) olduğunda sonuçları değiştirebilecek bazı iç işlevlere (örneğin, @@ROWCOUNT) başvuruda bulunuyorsa

  • Toplama işlevleri skaler UDF'ye parametre olarak geçirildiğinde (Microsoft SQL Server 2019 CU2'de eklendi)

  • UDF yerleşik görünümlere başvuruda bulunuyorsa (örneğin: OBJECT_ID) (Microsoft SQL Server 2019 CU2'de eklendi)

  • UDF XML yöntemlerini kullanıyorsa (Microsoft SQL Server 2019 CU4'te eklendi)

  • UDF, "TOP 1" olmadan ORDER BY ile SELECT içeriyorsa (Microsoft SQL Server 2019 CU4'te eklendi)

  • SELECT sorgusu ORDER BY yan tümcesiyle birlikte bir atama gerçekleştirirse (örneğin, SELECT @x = @x +1 FROM table ORDER BY column_name) (Microsoft SQL Server 2019 CU4'te eklendi)

  • UDF birden çok RETURN deyimi içeriyorsa (Microsoft SQL Server 2019 CU5'te eklendi)

  • UDF bir RETURN deyiminden çağrılırsa (Microsoft SQL Server 2019 CU5'te eklendi)

  • UDF STRING_AGG işlevine başvuruda bulunuyorsa (Microsoft SQL Server 2019 CU5'te eklendi)

  • UDF tanımı uzak tablolara başvuruyorsa (Microsoft SQL Server 2019 CU6'da eklendi)

  • UDF çağrı sorgusu GRUPLANDıRMA KÜMESİ, KÜP veya ROLLUP kullanıyorsa (Microsoft SQL Server 2019 CU6'da eklendi)

  • UDF çağırma sorgusu atama için UDF parametresi olarak kullanılan bir değişken içeriyorsa (örneğin, SELECT @y=2, @x=UDF(@y)) (Microsoft SQL Server 2019 CU6'da eklendi)

  • UDF şifrelenmiş sütunlara başvuruda bulunuyorsa (Microsoft SQL Server 2019 CU11'de eklendi)

  • UDF 'WITH XMLNAMESPACES' başvurularını içeriyorsa (Microsoft SQL Server 2019 CU11'de eklendi)

  • UDF'yi çağıran sorguda Ortak Tablo İfadeleri (CTE' ler) varsa (Microsoft SQL Server 2019 CU11'de eklendi)


Microsoft SQL Server 2019 CU2'ye yükselttikten sonra ancak CU5'e yükseltmeden önce UDF'nin inlining için uygun olup olmadığını yeniden değerlendirmeniz gerekir. Bunu yapmak için aşağıdaki yöntemlerden biriyle uygun skaler UDF'leri yenileyin:

Aşağıdaki betik, var olan inlined skaler UDF'ler için meta verileri yenilemek için bir betik oluşturur:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Yükleme dosyasının doğru sürümü ve sağlaması olduğunda Algıla ve Onar bu dosyanın üzerine kopyalamaz. Microsoft SQL Server 2019 CU5'e yükseltme yaptıktan sonra, derleme sırasında otomatik olarak UDF satır içi kullanılabilirliğini yeniden türeteceğiz.

Çözüm

Bu sorun, SQL Server için aşağıdaki toplu güncelleştirmede düzeltildi:

SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmede yer alan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:

Durum

Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.

Başvurular

Microsoft'un yazılım güncelleştirmelerini açıklamak için kullandığı terminoloji hakkında bilgi edinin.

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin

Eğitimleri keşfedin >

Yeni özellikleri ilk olarak siz edinin

Microsoft Insider’a katılın >

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?

Geri bildiriminiz için teşekkürler!

×