go backsqlschool blogs list

The sys.dm_exec_query_optimizer_info DMV

by Antonios Chatzipavlis

Θα ξεκινήσω την νέα αυτή χρονιά με ένα απλό και μικρό άρθρο αλλά που απαιτεί πολύ τριβή, διάβασμα και όρεξη να βουτήξει κανείς σε βαθιά και πολλές φορές αχαρτογράφητα ύδατα.

Είμαι σχεδόν σίγουρος ότι αν έκανα μια δημοσκόπηση με το ερώτημα αν κάποιος γνωρίζει το DMV που αναφέρω στον τίτλο του άρθρου αυτού το αποτέλεσμα θα ήταν συντριπτικά υπερ του όχι.

Το DMV αυτό σου δίνει μια πλειάδα από χρήσιμες πληροφορίες τις οποίες μπορείς να αξιοποιήσεις στην διερεύνηση θεμάτων που αφορούν απόδοση queries και το σημαντικότερο από όλα είναι ότι είναι πλήρως τεκμηριωμένο στα BOL.

Η χρηστικότητα του συγκεκριμένου DMV είναι διπλή.

Μπορεί να χρησιμοποιηθεί σε ένα παραγωγικό περιβάλλον σαν εργαλείο στατιστικής μέσα από το οποίο μπορούμε να δούμε στοιχεία όπως πόσα queries χρησιμοποιούν indexed views ή query hints ή περιέχουν subqueries ή κάνουν χρήση views ή κάνουν χρήση cursors και πολλά ακόμα.

Μπορεί όμως να χρησιμοποιηθεί και σαν εργαλείο για την βελτιστοποίηση ενός συγκεκριμένου query ή script. Σε αυτή όμως την περίπτωση θα πρέπει να χρησιμοποιηθεί σε ένα SQL Server instance που δεν έχει φόρτο (ιδανικά να είμαστε μόνοι μας) με τον εξής τρόπο

  1. Εκτελούμε το DMV και τα στοιχεία του τα αποθηκεύουμε κάπου πχ ένα excel ή temp table
  2. Εκτελούμε το query που θέλουμε να διερευνήσουμε 
  3. Εκτελούμε ξανά το 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*/
Ημερομηνία: 02 January 2016 20:37
Share it:

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS