תופעות
User-Defined פונקציות (UDFs) המיושמות ב- Transact-SQL ומחזירות ערך נתונים יחיד נקראות פונקציות שיטתיות של T-SQL User-Defined (UDFs).
התכונה Scalar UDF Inlining הוצגה ב- Microsoft SQL Server 2019. תכונה זו יכולה לשפר את הביצועים של שאילתות אשר מפעילות קבצי PDF שיטתיים של T-SQL שבהם ביצוע UDF הוא צוואר הבקבוק הראשי. חלוקה לרמות שיטתית של T-SQL ב- UDF ממירה באופן אוטומטי קבצי PDF ניתנים לקווים מוטבעים לביטויים יחסיים.
עדכון מצטבר זה (CU) כולל כמה תיקונים בין האזורים הבאים עבור תרחישים שבהם שאילתה המשתמשת ב- Inlining של UDF שיטתי עשויה להחזיר הודעת שגיאה או תוצאות בלתי צפויות:
-
שגיאת אי-התאמה של סוג מתרחשת אם סוג ההחזרה של UDF הוא sql_variant (נוסף ב- SQL Server 2019 CU2).
-
בקשת UDF מ-sp_executesqlמבטלת את הביצוע (נוסף ב- SQL Server 2019 CU2).
-
מסמכי UDFs המפנה לתוויות ללא GOTO משויכת יחזירו תוצאות שגויות (שנוספו ב- SQL Server 2019 CU2).
-
מצבים של הזיכרון אזלו ודליפות זיכרון מתרחשות עקב קבצי UDFs סרגליים גדולים מאוד (SQL Server 2019 CU2).
-
משתנים שלא אותחלו המשמשים במשפטי תנאי (IF-ELSE) לגרום לשגיאות (SQL Server 2019 CU2).
-
שגיאת המרה מפורשת מתרחשת אם UDF מכיל את פרמטר sql_variant(נוסף ב- SQL Server 2019 CU7).
-
מתרחשת שגיאה אם הפונקציה הסרגלית מפנה CHECKSUM(נוסף ב- CU7 SQL Server 2019).
-
בקשת UDF הכוללת הערכות חוזרות רבות של ביטויים שיטתיים עלולה לגרום לשגיאה מתזמן שאינו מניבה (נוספה ב- SQL Server 2019 CU7).
הערה: התיקון לבעיה זו עלול לגרום לעתים ל רגרסיה בביצועים. כדי לצמצם את רגרסיית הביצועים, באפשרותך להפוך את התיקון המקורי ללא זמין על-ידי הפעלת דגל מעקב (TF) 13156.
Microsoft פועלת למציאת תיקון עבור רגרסיית ביצועים זו, שזמינה ב- CU עתידי.
-
מתרחשת שגיאה אם שאילתת ההפניה של UDF משתמשת OPTION (RECOMPILE)(נוסף ב- SQL Server 2019 CU7).
-
שגיאות הרשאה מתרחשות אם תצוגות מפעילות קבצי PDF מוטבעים (שנוספו ב- SQL Server 2019 CU9).
-
הפרות גישה מתרחשות אם נעשהquery_tsql_scalar_udf_inlinedXEvent (נוסף ב- SQL Server 2019 CU9).
-
אופן פעולה לא עקבי מתרחש מאחר Scalar UDF Inlining does not respect the QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_nquery hint (added in SQL Server 2019 CU9).
-
קבצי UDFs המכילים חלוקה לרמות מכילים צבירה שעלולה לגרום לשגיאות מתזמן שאינן מניבה (שנוספו ב- SQL Server 2019 CU9).
-
שגיאות 'אין זיכרון פנוי' מתרחשות עקב רצף של פעולות שיטתיות באותו משתנה בבלוקים מותנים (שנוספו ב- SQL Server 2019 CU9).
-
לאחר שדרוג ל- CU9, הפרת גישה מתרחשת אם אובייקט מפעיל UDF (UDF1) סקארי הניתן לעריכה (UDF1) בעל UDF (UDF2) סקארי הניתן לעריכה, המשמש פרמטר קלט (נוסף ב- SQL Server 2019 CU11).
-
חלוקה לרמות של קבצי PDF עלולה לגרום לשגיאות וליצור קודי שגיאה 6846, 1011 ו- 107 (נוסף ב- SQL Server 2019 CU11).
-
חלוקה לרמות של קבצי PDF אשר פועלים כחשבון שאינו sysadmin עשויה להחזיר את הודעת השגיאה, "אירעה שגיאה חמורה בפקודה הנוכחית. התוצאות, אם קיימות, יש למחוק" (נוסף ב- SQL Server 2019 CU16).
-
הפרת גישה מתרחשת אם טבלאות זמניות מופעלות בתוך קבצי UDFs באמצעות מילים נרדפות (שנוספו ב- Microsoft SQL Server 2022 CU1 ו- SQL Server 2019 CU19).
-
הפרת גישה מתרחשת אם הגדרת UDF מכילה רק תוויות GOTO ו משפטRETURN (נוסף ב- SQL Server 2022 CU1 ו- SQL Server 2019 CU19).
-
הפונקציה Scalar UDF מחזירה תוצאות בתבניות תאריך ושעה שונות כאשר התכונה Scalar UDF Inlining מופעלת (נוספה ב- SQL Server 2022 CU3 ו- SQL Server 2019 CU20).
-
קובץ Dump נוצר אם שאילתה הכוללת משפט GROUP BY משתמשת בקבצי UDFs מוטבעים במשפט SELECT ללא פונקציית צבירה (שנוספה ב- SQL Server 2022 CU12 וב- SQL Server 2019 CU26).
-
השגיאה "חריגה מרמה מרבית של פרוצדורה מאוחסנת, פונקציה, גורם מפעיל או תצוגה של קינון (מגבלה 32)" מתרחשת אם התכונה Scalar UDF Inlining מופעלת, גם אם רמת הקינון אינה חריגה (נוספה ל- SQL Server 2022 CU12 ו- SQL Server 2019 CU26).
-
פגם בזיכרון מתרחש sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf אם התכונה Scalar UDF Inlining מופעלת (נוספה ב- SQL Server 2022 CU12 ו- SQL Server 2019 CU26).
עדכון מצטבר זה חוסם גם חלוקה לרמות בתרחישים הבאים:
-
אם ה- UDF מפנה לפונקציות פנימיות מסוימות (לדוגמה, @@ROWCOUNT) שעשויות לשנות את התוצאות כאשר UDF מסומן ב- inlined (נוסף ב- SQL Server 2019 CU2).
-
כאשר פונקציות צבירה מועברות כפרמטרים ל- UDF סקארי (נוסף ב- SQL Server 2019 CU2).
-
אם UDF מפנה אל תצוגות מוכללות (לדוגמה: OBJECT_ID) (נוסף ב- SQL Server 2019 CU2).
-
אם UDF משתמש בפעולות שירות של XML (שנוספו ב- SQL Server 2019 CU4).
-
אם ה- UDF מכיל SELECTמשתמש במשפטORDER BYאך לא TOP 1(נוסף ב- SQL Server 2019 CU4).
-
אם משפטSELECT מבצע הקצאה יחד עם משפט ORDER BY (לדוגמה, SELECT @x = @x +1 FROM table ORDER BY column_name) (נוסף ב- SQL Server 2019 CU4).
-
אם UDF מכיל משפטי RETURN מרובים (נוספים ב- CU5 SQL Server 2019).
-
אם מתבצעת קריאה ל- UDF RETURN (נוסף ב- CU5 SQL Server 2019).
-
אם UDF מפנה לפונקציה STRING_AGG (שנוספה ב- SQL SERVER 2019 CU5).
-
אם הגדרת UDF מפנה לטבלאות מרוחקות (נוסף ב- SQL Server 2019 CU6).
-
אם שאילתת השיחות ב- UDF משתמשת GROUPING SETS, CUBE, או ROLLUP (נוספת ב- SQL Server 2019 CU6).
-
אם שאילתת השיחות UDF מכילה משתנה המשמש פרמטר UDF עבור הקצאה (לדוגמה, SELECT @y=2, @x=UDF(@y)) (נוסף ב- SQL Server 2019 CU6).
-
אם ה- UDF מפנה לעמודות מוצפנות (שנוספו ב- SQL Server 2019 CU11).
-
אם ה- UDF מכיל הפניות WITH XMLNAMESPACES(נוסף ב- SQL Server 2019 CU11).
-
אם השאילתה מפעילה את UDF כוללת ביטויי טבלה נפוצים (CTEs) (שנוספו ב- SQL Server 2019 CU11).
-
אם הגדרת UDF מכילה טבלאות זמניות או מילים נרדפות עבור טבלאות זמניות (נוסף ב- SQL Server 2022 CU1 ו- SQL Server 2019 CU19).
-
אם הגדרת UDF כוללת משפטSELECTיחד עם משפטDISTINCTבעמודות הקצאה מרובות (נוסף ב- SQL Server 2022 CU4 ו- SQL Server 2019 CU20).
-
אם UDF מכיל משפט SELECT המשתמש במשפט ה- TABLESAMPLE PERCENT והקצאות מרובות של משתנים (נוסף ב- SQL Server 2022 CU7).
-
אם קיימת שאילתת INSERT בטבלה שאליה מפנה תצוגה כוללת אינדקס המכילה UDF (נוסף ב- SQL Server 2022 CU12 ו- SQL Server 2019 CU26).
לאחר שדרוג ל- SQL Server 2019 CU2, אך לפני השדרוג ל- SQL Server 2019 CU5, עליך להעריך מחדש אם UDF זכאי לחלוקה לרמות. לשם כך, רענן קבצי PDF שיטתיים זכאים באמצעות אחת מהשיטות הבאות:
-
הפעל sp_refreshsqlmodule עבור קבצי PDF שיטתיים ישימים. לקבלת מידע נוסף אודות פרוצדורה מאוחסנת זו של המערכת, ראה sp_refreshsqlmodule (Transact-SQL).
-
שנה או צור מחדש את ה- UDF הסרגלי הקיים באמצעות הגדרות, הרשאות והגדרת מאפיינים קיימים. לקבלת מידע נוסף, ראה הפונקציה ALTER (Transact-SQL).
הפקודה הבאה יוצרת קובץ Script לרענון המטה-נתונים של כל קובץ PDF סרגלי קיים המסומן בתרשים מוטבע:
/*
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
הערה: לאחר שדרוג ל- SQL SERVER 2019 CU5, אנו נחדש את ההפקה האוטומטית של יכולת ההפצה של UDF במהלך ההידור.
פתרון
בעיה זו נפתרה בעדכונים המצטברים הבאים עבור SQL Server:
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
מצב
Microsoft אישרה כי זוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".
הפניות
למד על המינוח שבו Microsoft משתמשת כדי לתאר עדכוני תוכנה.