Θα ξεκινήσω την νέα αυτή χρονιά με ένα απλό και μικρό άρθρο αλλά που απαιτεί πολύ τριβή, διάβασμα και όρεξη να βουτήξει κανείς σε βαθιά και πολλές φορές αχαρτογράφητα ύδατα.
Είμαι σχεδόν σίγουρος ότι αν έκανα μια δημοσκόπηση με το ερώτημα αν κάποιος γνωρίζει το DMV που αναφέρω στον τίτλο του άρθρου αυτού το αποτέλεσμα θα ήταν συντριπτικά υπερ του όχι.
Το DMV αυτό σου δίνει μια πλειάδα από χρήσιμες πληροφορίες τις οποίες μπορείς να αξιοποιήσεις στην διερεύνηση θεμάτων που αφορούν απόδοση queries και το σημαντικότερο από όλα είναι ότι είναι
πλήρως τεκμηριωμένο στα BOL.
Η χρηστικότητα του συγκεκριμένου DMV είναι διπλή.
Μπορεί να χρησιμοποιηθεί σε ένα παραγωγικό περιβάλλον σαν εργαλείο στατιστικής μέσα από το οποίο μπορούμε να δούμε στοιχεία όπως πόσα queries χρησιμοποιούν indexed views ή query hints ή περιέχουν subqueries ή κάνουν χρήση views ή κάνουν χρήση cursors και πολλά ακόμα.
Μπορεί όμως να χρησιμοποιηθεί και σαν εργαλείο για την βελτιστοποίηση ενός συγκεκριμένου query ή script. Σε αυτή όμως την περίπτωση θα πρέπει να χρησιμοποιηθεί σε ένα SQL Server instance που δεν έχει φόρτο (ιδανικά να είμαστε μόνοι μας) με τον εξής τρόπο
- Εκτελούμε το DMV και τα στοιχεία του τα αποθηκεύουμε κάπου πχ ένα excel ή temp table
- Εκτελούμε το query που θέλουμε να διερευνήσουμε
- Εκτελούμε ξανά το DMV και συγκρίνουμε τα στοιχεία που αυτό δίνει σε αυτή την εκτέλεση με αυτά που είχαμε συλλέξει από την αρχική εκτέλεση
Για παράδειγμα
use AdventureWorks2014;
go
SELECT 1 as t,* into #qoi FROM sys.dm_exec_query_optimizer_info;
go
select * from Sales.SalesOrderHeader
where OrderDate>='20070101'
order by OrderDate desc;
go
insert into #qoi
SELECT 2,* FROM sys.dm_exec_query_optimizer_info;
go
select * from #qoi
order by 2,1;
go
Μελετώντας τα στοιχεία που μας δίνει το τελευταίο query θα είμαστε σε θέση να καταλάβουμε πως ακριβώς έχει συμπεριφερθεί ο query optimizer για το συγκεκριμένο execution
Καλη Χρονιά με υγεία πάντα.
/*antonch*/