KB4538581 - ΕΠΙΔΙΟΡΘΩΣΗ: Ανυσματικό πρόβλημα με την inlining UDF στον SQL Server 2019

Συμπτώματα

User-Defined συναρτήσεις (UD) που εφαρμόζονται στην Transact-SQL και επιστρέφουν μία τιμή δεδομένων είναι γνωστές ως συναρτήσεις ανυσματικές συναρτήσεις T-SQL User-Defined (ΟDF). 

Ο Microsoft SQL Server 2019 παρουσίασε τη δυνατότητα κλιμακούμενης inlining UDF που μπορεί να βελτιώσει τις επιδόσεις των ερωτημάτων που καλούν UDF ανυσματικό T-SQL, όπου η εκτέλεση των UDF είναι το κύριο σημείων συμφόρησης. Η υποστάσεων UDF ανυσματικός T-SQL μετασχηματίζει αυτόματα τις ενσωματωμένες 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)

  • Οι συνθήκες απώλειας μνήμης και οι διαρροές μνήμης προκύπτουν λόγω πολύ μεγάλων ανυσμα σειράς τωνUD (προστίθενται στον 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)

  • Παρουσιάστηκαν σφάλματα δικαιωμάτων όταν οι προβολές καλούν τις inlined UDFs (προστέθηκαν στον Microsoft SQL Server 2019 CU9)

  • Παραβιάσεις πρόσβασης που συμβαίνουν κατά τη χρήση του XEvent query_tsql_scalar_udf_inlined (προστέθηκε στον Microsoft SQL Server 2019 CU9) 

  • Ασυνέπεια στη συμπεριφορά λόγω ανυσματικής υπογραμμής UDF που δεν σέβεται την υπόδειξη ερωτήματος "QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n" (προστέθηκε στον Microsoft SQL Server 2019 CU9)

  • Οι UDFs με διαγραμμάτωση περιέχουν συνάθροιση που μπορεί να έχουν ως αποτέλεσμα σφάλμα μη απόδοσης χρονοδιαγράμματος (προστέθηκε στον Microsoft SQL Server 2019 CU9) 

  • Τα σφάλματα μνήμης που οφείλονται σε ακολουθία ανυσμα σειράς λειτουργιών στην ίδια μεταβλητή σε μπλοκ υπό όρους (προστέθηκαν στον Microsoft SQL Server 2019 CU9)

Αυτή η αθροιστική ενημέρωση αποκλείει επίσης την υποσάθροηση στα ακόλουθα σενάρια:

  • Εάν η UDF αναφέρεται σε ορισμένες συναρτήσεις ελέγχου (για παράδειγμα, @@ROWCOUNT) που μπορεί να αλλάξουν τα αποτελέσματα όταν είναι inlined (προστέθηκαν στον 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 πίνακα 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 χρησιμοποιεί ΣΎΝΟΛα ΟΜΑΔΟΠΟΊΗΣΗς, CUBE ή ROLLUP (προστέθηκε στον Microsoft SQL Server 2019 CU6)

  • Εάν το ερώτημα κλήσης UDF περιέχει μια μεταβλητή που χρησιμοποιείται ως παράμετρος UDF για ανάθεση (για παράδειγμα, SELECT @y=2, @x=UDF(@y)) (προστέθηκε στον Microsoft SQL Server 2019 CU6)

Μετά την αναβάθμιση σε Microsoft SQL Server 2019 CU2 αλλά πριν από την αναβάθμιση σε CU5, θα πρέπει να αξιολογήσετε ξανά εάν μια UDF είναι κατάλληλη για inlining. Για να το κάνετε αυτό, ανανεώστε τις κατάλληλες ανυσμα σειρά των ΟΕΕ με οποιαδήποτε από τις παρακάτω μεθόδους:

  • Εκτελέστε sp_refreshsqlmodule για τις σχετικές ανυσματικέςudfs (ανατρέξτε στο θέμα sp_refreshsqlmodule (Transact-SQL) για λεπτομέρειες σχετικά με την αποθηκευμένη διαδικασία συστήματος)

  • Τροποποιήστε ή δημιουργήστε εκ νέου την υπάρχουσα ανυσματικές UDF χρησιμοποιώντας υπάρχοντα ορισμό, δικαιώματα και ορισμό ιδιοτήτων (ανατρέξτε στην πρόταση ALTER FUNCTION (Transact-SQL))

Η ακόλουθη δέσμη ενεργειών δημιουργεί μια δέσμη ενεργειών για την ανανέωση μετα-δεδομένων για υπάρχουσες ανυσματες ADF:
 

/*

Δημιουργεί μια δέσμη ενεργειών που μπορεί να χρησιμοποιηθεί για την ανανέωση όλων των ενεργών ενσωματωμένων ανυσμα των ADF.


Σημείωση Η sp_refreshsqlmodule εντολή δεν επηρεάζει τα δικαιώματα, τις εκτεταμένες ιδιότητες,

ή τις επιλογές SET που σχετίζονται με το αντικείμενο.

*/

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

Σημείωση Μετά την αναβάθμιση σε Microsoft SQL Server 2019 CU5, θα προκύψει αυτόματα α γραμμές UDF κατά την εκ νέου μεταγλώττιση.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι αυτό είναι ένα πρόβλημα στα προϊόντα της Microsoft που αναφέρονται στην ενότητα "Ισχύει για".

Επίλυση

Αυτό το πρόβλημα έχει διορθωθεί στην ακόλουθη αθροιστική ενημέρωση για τον SQL Server:

Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις άμεσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που περιλαμβάνονταν στην προηγούμενη αθροιστική ενημέρωση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για τον SQL Server:

Αναφορές

Μάθετε περισσότερα σχετικά με την ορολογία που χρησιμοποιεί η Microsoft για την περιγραφή των ενημερώσεων λογισμικού.

Χρειάζεστε περισσότερη βοήθεια;

Αναπτύξτε τις δεξιότητές σας
Εξερευνήστε το περιεχόμενο της εκπαίδευσης
Αποκτήστε πρώτοι τις νέες δυνατότητες
Συμμετοχή στο Microsoft Insider

Σας βοήθησαν αυτές οι πληροφορίες;

Σας ευχαριστούμε για τα σχόλιά σας!

Σας ευχαριστούμε για τα σχόλιά σας! Φαίνεται ότι μπορεί να είναι χρήσιμο να συνδεθείτε με έναν από τους συνεργάτες υποστήριξης του Office.

×