UDF performance

Συζητήσεις για τον Microsoft SQL Server

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

UDF performance

Δημοσίευση από shadow » 22 Μάιος 2006 22:47

εχω μια απορία σε σχέση με τον sql server.
εκτελώ μια αλληλουχία εντολών από τον sql analyzer οι οποίες εκτελούνται σε ένα α χρόνο. Οταν δημιουργήσω μια udf , με ακριβώς την ίδια αλληλουχία εντολών βλέπω ότι ο χρόνος εκτέλεσης έχει αυξηθεί σημαντικά..
Αυτό που δεν μπορώ να καταλάβω είναι που οφείλεται αυτή η διαφορά στον χρόνο εκτέλεσης μεταξύ analyzer & udf :roll: . Εχω κάνει όλες τις βελτιστοποιήσεις που χρειάζονται , αλλά περίμενα ότι από την στιγμή που ο χρόνος εκτέλεσης έχει μειωθεί σημαντικά μεσα από τον analyzer, και με κλήση της αντίστοιχης function θα έπαιρνα χρόνους με μικρή απόκλιση (+2/-2 δευτερόλεπτα το θεωρώ οκ). Και στις 2 εκτελέσεις έχω το ιδιο load στο server οπότε δεν μπορώ να καταλάβω τι ^&*^ κάνει ο sql... any idea or link θα ήταν αρκετά χρήσιμο :D
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27622
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

UDF performance

Δημοσίευση από cordis » 23 Μάιος 2006 13:18

από που την καλείς;

User Defined Functions (UDF)
Refrain from using user defined functions (UDF) in a select statement that may potentially return many records. UDFs are executed as many times as there are rows in a returned result. A query that returns 100,000 rows calls the UDF 100,000 times.
http://www.teratrax.com/articles/sql_se ... mance.html
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27622
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

UDF performance

Δημοσίευση από cordis » 23 Μάιος 2006 13:39

δες και ένα άλλο ωραίο..

SQL Server Clinic: T-SQL performance problems and solutions
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

UDF performance

Δημοσίευση από shadow » 23 Μάιος 2006 15:01

Εάν δεν κάνω λάθος αυτό αναφέρεται όταν η function επιστρέφει ένα scalar και καλούμε την function μέσα από τα querakia, με αποτέλεσμα να υπολογίζεται η τιμή της Udf για κάθε row του αποτελέσματος

Κώδικας: Επιλογή όλων

select * from table where col=testUDF() ; //less efficient

//optimized query
set @var = testUDF;
select * from table where col=@var
εγώ έχω φτιάξει μια function η οποία μου επιστρέφει έναν πίνακα και την καλώ μέσα από τον analyzer:

Κώδικας: Επιλογή όλων

exec sp_executesql N'SELECT * FROM dbo.testingUDF(@P1 , @P2)
 ', N'@P1 int,@P2 int', 0, 42
και η διαφορά στους χρόνους που ανέφερα είναι όταν πάρω copy-paste το content της συνάρτησης και το τρέξω κατευθείαν...αρχίζει να με εκνευρίζει ο sql server :@
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27622
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

UDF performance

Δημοσίευση από cordis » 24 Μάιος 2006 01:24

χμμμ... λες να καλείτε τόσες φορές όσες και οι γραμμές του πίνακα που επιστρέφει; Φτιάξε ένα dummy πίνακα με ένα datetime μόνο και στο τέλος της function βάλε ένα insert με getdate() για να δούμε πόσες φορές καλείτε.. ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

UDF performance

Δημοσίευση από dva_dev » 24 Μάιος 2006 01:51

Δεν κάνεις ένα set statistics time on|off για να καταγράφεις τους χρόνους, και να έχουμε μια καλύτερη εκτίμηση της διαφοράς

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27622
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

UDF performance

Δημοσίευση από cordis » 24 Μάιος 2006 02:00

εγώ βλακεία είπα.. άλλο κατάλαβα αρχικά ότι κάνει.. :P

...και στην άλλη περίπτωση με την exec sp_executesql την εκτελείς;
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

UDF performance

Δημοσίευση από shadow » 24 Μάιος 2006 21:19

cordis έγραψε: χμμμ... λες να καλείτε τόσες φορές όσες και οι γραμμές του πίνακα που επιστρέφει;
ms sql server ειναι αυτός , οπότε μου πέρασε και εμένα από το μυαλό :kaloe: αλλά όχι δεν ισχύει αυτό..
Εχω πειραματιστεί με όλους τους δυνατούς συνδυασμούς για το πως θα την καλέσω, αλλά δεν βλέπω καμιά μεταβολή στους χρόνους

Κώδικας: Επιλογή όλων

exec sp_executesql N'SELECT * FROM dbo.testingUDF(@P1 , @P2)
 ', N'@P1 int,@P2 int', 0, 42
SELECT  * FROM dbo.testingUDF(0,42);

τα παραπάνω μου δίνουν 16δεύτερα περίπου και στις 2 περιπτώσεις αρα το κόλλημα δεν είναι στην exec sp_executesql...

Τεσπα καταλήγω στο ότι αυτή η συμπεριφορά είναι μα&^ς του sql server.Απλώς μου έχει μείνει η απορία :evil:
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

UDF performance

Δημοσίευση από dva_dev » 24 Μάιος 2006 23:59

Το δοκίμασες με statistics time on?
Που σου έδειξε ότι τρώει τα 16".
Πόσο χρόνο κάνει με udf και που τρώει τον χρόνο?

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

UDF performance

Δημοσίευση από shadow » 25 Μάιος 2006 00:42

udf->περιπου 16δευτερα
analyzer ->περίπου 8δευτερα
αρα η διαφορά ειναι περιπου 8δευτερόλεπτα. Τεσπα το θεμα ειναι οτι η κλήση της Udf ειναι πιο αργη και εχω βαλει και statistics on (δεν ειδα τιποτα περίεργο στα reads etc), και καθαρισμο της cache για να ειναι πιο αξιόπιστοι οι χρόνοι.
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Απάντηση

Επιστροφή στο “MS SQL Server”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες