ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้

KB4538581 - การแก้ไข: ปัญหาการ Inlining UDF สเกลาใน SQL Server 2019

อาการ

User-Defined (UDFs) ที่ปรับใช้ในฟังก์ชัน Transact-SQL และที่ส่งกลับค่าข้อมูลเดียวเรียกว่า ฟังก์ชัน T-SQL Scalar User-Defined (UDFs) 

Microsoft SQL Server 2019 ได้เปิดตัวฟีเจอร์การ Inlining ของ Scalar UDF ที่สามารถปรับปรุงประสิทธิภาพของคิวรีที่เรียกใช้ T-SQL Scalar UDFs ซึ่งการปฏิบัติการ UDF คือคอขวดหลัก T-SQL Scalar UDF Inlining จะแปลง UDF แบบอินไลน์ให้กลายเป็นนิพจน์เชิงสัมพันธ์โดยอัตโนมัติ 


การอัปเดตสะสมนี้มีการแก้ไข หลายอย่าง ในพื้นที่ต่อไปนี้ในสถานการณ์ที่คิวรีที่ใช้การ Inlining UDF แบบสเกลาอาจส่งกลับข้อผิดพลาดหรือผลลัพธ์ที่ไม่คาดคิด

  • พิมพ์ข้อผิดพลาดที่ไม่ตรงกันถ้าชนิดการส่งกลับ UDF เป็นชนิดsql_variant (ถูกเพิ่มใน Microsoft SQL Server 2019 CU2)

  • การเพิกถอน UDF sp_executesqlยกเลิกการปฏิบัติการ (ที่เพิ่มใน Microsoft SQL Server 2019 CU2)

  • UDFs อ้างอิงป้ายชื่อโดยไม่มีการสั่ง GOTO ที่เชื่อมโยงจะส่งกลับผลลัพธ์ที่ไม่ถูกต้อง (เพิ่มใน Microsoft SQL Server 2019 CU2)

  • เงื่อนไขในหน่วยความจําไม่เพียงพอและการรั่วไหลของหน่วยความจําเกิดขึ้นเนื่องจากยูดาฟสเกลาขนาดใหญ่มาก (ที่เพิ่มใน Microsoft SQL Server 2019 CU2)

  • ตัวแปรที่ไม่ได้ระบุที่ใช้ในเงื่อนไข (IF-ELSE) ทําให้เกิดข้อผิดพลาด (ถูกเพิ่มใน Microsoft SQL Server 2019 CU2)

  • ข้อผิดพลาดการแปลงอย่างชัดเจนถ้า UDF SQL_VARIANTพารามิเตอร์ (ถูกเพิ่มใน Microsoft SQL Server 2019 CU7)

  • เกิดข้อผิดพลาดเมื่อฟังก์ชันสเกลาอ้างอิง CHECKSUM (ถูกเพิ่มใน Microsoft SQL Server 2019 CU7)

  • การรีสตาร์ต UDF ที่มีการประเมินใหม่จํานวนมากอาจส่งผลให้เกิดข้อผิดพลาดตัวจัดตารางที่ไม่ให้ผลลัพธ์ (ถูกเพิ่มใน Microsoft SQL Server 2019 CU7)

  • เกิดข้อผิดพลาดเมื่อ UDF อ้างอิงคิวรีใช้ OPTION (RECOMPILE) (ถูกเพิ่มใน Microsoft SQL Server 2019 CU7)

  • ข้อผิดพลาดของสิทธิ์ที่เพิ่มขึ้นเมื่อมุมมองยูดีฟที่ขีดเส้นใต้ (ถูกเพิ่มใน Microsoft SQL Server 2019 CU9)

  • การละเมิดการเข้าถึงที่เกิดขึ้นเมื่อใช้ชุด XEDVENT query_tsql_scalar_udf_inlined (ถูกเพิ่มใน Microsoft SQL Server 2019 CU9) 

  • ลักษณะการเกิดขึ้นที่ไม่สอดคล้องกันเนื่องจาก Scalar UDF Inlining ไม่เคารพเคล็ดลับคิวรี 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' (ถูกเพิ่มใน Microsoft SQL Server 2019 CU9)

  • UDF ที่ขีดเส้นใต้มีการรวมที่อาจส่งผลให้เกิดข้อผิดพลาดตัวจัดตารางไม่แสดงผลลัพธ์ (เพิ่มใน Microsoft SQL Server 2019 CU9) 

  • มีข้อผิดพลาดหน่วยความจําไม่เพียงพอเนื่องจากการดําเนินการสเกลาบนตัวแปรเดียวกันในการบล็อกตามเงื่อนไข (ถูกเพิ่มใน Microsoft SQL Server 2019 CU9)

  • การละเมิดการเข้าถึงอาจเกิดขึ้นเมื่อวัตถุเรียกใช้สเกลาแบบอินไลน์ UDF (UDF1) ที่มีสเกลาแบบอินไลน์ UDF (UDF2) ที่ใช้เป็นพารามิเตอร์ป้อนเข้าหลังการอัปเกรดเป็น CU9 (ถูกเพิ่มใน Microsoft SQL Server 2019 CU11)

  • UDF ที่ขีดเส้นใต้อาจส่งผลให้เกิดข้อผิดพลาดด้วยรหัสข้อผิดพลาด 6846, 1011 และ 107 (ที่เพิ่มใน Microsoft SQL Server 2019 CU11)


การอัปเดตสะสมนี้ยัง บล็อกการขีดเส้นใต้ในสถานการณ์ต่อไปนี้:

  • ถ้า UDF อ้างอิงฟังก์ชันเฉพาะบางอย่าง (ตัวอย่างเช่น @@ROWCOUNT) ที่อาจเปลี่ยนแปลงผลลัพธ์เมื่ออินดีมา (ถูกเพิ่มใน Microsoft SQL Server 2019 CU2)

  • เมื่อฟังก์ชันการรวมถูกส่งเป็นพารามิเตอร์ไปยัง UDF แบบสเกลา (ที่เพิ่มใน Microsoft SQL Server 2019 CU2)

  • ถ้า UDF อ้างอิงมุมมองที่มีอยู่แล้วภายใน (ตัวอย่างเช่น: OBJECT_ID) (ที่เพิ่มใน Microsoft SQL Server 2019 CU2)

  • ถ้า UDF ใช้วิธีการ XML (ที่เพิ่มใน Microsoft SQL Server 2019 CU4)

  • ถ้า UDF มี SELECT ที่มี ORDER BY โดยไม่มี "TOP 1" (เพิ่มใน Microsoft SQL Server 2019 CU4)

  • ถ้าคิวรี SELECT แสดงงานที่มอบหมายร่วมกับส่วนสั่ง ORDER BY (ตัวอย่างเช่น SELECT @x = @x +1 FROM table ORDER BY column_name) (ที่เพิ่มใน Microsoft SQL Server 2019 CU4)

  • ถ้า UDF มีหลายข้อความ RETURN (เพิ่มใน Microsoft SQL Server 2019 CU5)

  • ถ้า UDF ถูกเรียกจากข้อความ RETURN (เพิ่มใน Microsoft SQL Server 2019 CU5)

  • ถ้า UDF อ้างอิงฟังก์ชัน STRING_AGG (ที่เพิ่มใน Microsoft SQL Server 2019 CU5)

  • ถ้าข้อนิยาม UDF อ้างอิงตารางระยะไกล (เพิ่มใน Microsoft SQL Server 2019 CU6)

  • ถ้าคิวรีการโทรผ่าน UDF ใช้ชุด GROUPING, CUBE หรือ ROLLUP (ถูกเพิ่มใน Microsoft SQL Server 2019 CU6)

  • ถ้าคิวรี UDF-calling มีตัวแปรที่ใช้เป็นพารามิเตอร์ UDF ที่มอบหมาย (ตัวอย่างเช่น SELECT @y=2, @x=UDF(@y)) (เพิ่มใน Microsoft SQL Server 2019 CU6)

  • ถ้าการอ้างอิง UDF ที่เข้ารหัสลับคอลัมน์ (ถูกเพิ่มใน Microsoft SQL Server 2019 CU11)

  • ถ้า UDF มีการอ้างอิงไปยัง 'WITH XMLNAMESPACES' (ถูกเพิ่มใน Microsoft SQL Server 2019 CU11)

  • ถ้าคิวรีที่เรียกใช้ UDF มีนิพจน์ตารางทั่วไป (CTEs) (ถูกเพิ่มใน Microsoft SQL Server 2019 CU11)


หลังจากที่คุณอัปเกรดเป็น Microsoft SQL Server 2019 CU2 แต่ก่อนที่คุณจะอัปเกรดเป็น CU5 คุณควรประเมินอีกครั้งว่า UDF มีสิทธิ์ในการขีดเส้นใต้หรือไม่ เมื่อต้องการให้รีเฟรชสเกลาที่มีสิทธิ์ในUDFs ผ่านวิธีการใดวิธีหนึ่งต่อไปนี้:

  • เรียกใช้sp_refreshsqlmodule UDF สเกลาที่เกี่ยวข้อง (ดูsp_refreshsqlmodule (Transact-SQL)เพื่อดูรายละเอียดเกี่ยวกับกระบวนงานที่จัดเก็บไว้ของระบบนี้)

  • เปลี่ยนแปลงหรือสร้างสเกลา UDF ที่มีอยู่ใหม่โดยใช้การนิยาม สิทธิ์ และตั้งค่าคุณสมบัติที่มีอยู่ (ดูALTER FUNCTION (Transact-SQL))

สคริปต์ต่อไปนี้จะสร้างสคริปต์เพื่อรีเฟรช Metadata For existined scalar UDFs:

/*

สร้างสคริปต์ที่สามารถใช้เพื่อรีเฟรช Scalar UDFs แบบอินไลน์ที่สามารถใช้งานทั้งหมดได้

หมายเหตุ sp_refreshsqlmoduleคุณสมบัติจะไม่มีผลต่อสิทธิ์ คุณสมบัติเพิ่มเติมใดๆ

หรือตัวเลือก SET ที่สัมพันธ์กับวัตถุ

*/

เลือก '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

หมายเหตุ หลังจากที่คุณอัปเกรดเป็น Microsoft SQL Server 2019 CU5 เราจะรับ UDF Inlineability ในระหว่างการคอมไพล์อีกครั้งโดยอัตโนมัติ

การแก้ไข

ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตสะสมต่อไปนี้SQL Server:

แต่ละการอัปเดตสะสมใหม่SQL Serverมีการแก้ไขด่วนทั้งหมดและการแก้ไขด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตสะสมก่อนหน้า ตรวจสอบการอัปเดตสะสมล่าสุดSQL Server:

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

อ้างอิง

เรียนรู้เกี่ยวกับ ศัพท์เฉพาะที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ขยายทักษะของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Microsoft Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ

ขอขอบคุณสำหรับคำติชมของคุณ! เราคิดว่าอาจเป็นประโยชน์ที่จะให้คุณได้ติดต่อกับหนึ่งในตัวแทนฝ่ายสนับสนุน Office ของเรา

×