Database Scoped Configuration in SQL Server 2016
Fivi Panopoulou - Sotiris Karras
Στον SQL Server 2016 παρουσιάστηκε η δυνατότητα να παραμετροποιήσουμε το περιβάλλον εκτέλεσης ενός query σε επίπεδο database. Μπορούμε λοιπόν πλέον να καθορίσουμε την τιμή των εξής παραμέτρων για μια συγκεκριμένη βάση στον server μας:
-
MAXDOP: Θέτουμε την επιθυμητή τιμή του MAXDOP για την βάση μας
-
LEGACY CARDINALITY ESTIMATION: Καθορίζουμε αν θέλουμε να χρησιμοποιηθεί ο καινούριος cardinality estimator ή όχι, άσχετα με το compatibility level που έχουμε επιλέξει για την συγκεκριμένη βάση
-
PARAMETER SNIFFING: Απενεργοποιώντας την επιλογή αυτή, τα queries μας προς την βάση αυτή θα συμπεριφέρονται σαν να είχαμε ορίσει το OPTIMIZE FOR UNKNOWΝ query hint.
-
QUERY OPTIMIZER HOTFIXES: Ενεργοποιώντας την παράμετρο αυτή επιτρέπουμε να χρησιμοποιούνται στο επίπεδο της συγκεκριμένης βάσης τα πιο πρόσφατα hotfixes που αφορούν τον query optimizer, ανεξάρτητα από το επιλεγμένο compatibility level
Αυτό το configuration γίνεται μέσω του ALTER DATABASE SCOPED CONFIGURATION statement που προστέθηκε στον SQL Server 2016, ενώ παράλληλα μπορούμε ανά πάσα στιγμή να δούμε τις επιλογές που έχουμε θέσει με το sys.database_scoped_configurations όπως φαίνεται παρακάτω:
SELECT *
FROM sys.database_scoped_configurations;
configuration_id name value value_for_secondary
---------------- ------------------------------------------------------------ --------
1 MAXDOP 0 NULL
2 LEGACY_CARDINALITY_ESTIMATION 0 NULL
3 PARAMETER_SNIFFING 1 NULL
4 QUERY_OPTIMIZER_HOTFIXES 0 NULL
Επιπλέον, μας δίνεται και η δυνατότητα να καθαρίζουμε την procedure cache όπου αποθηκεύονται τα execution plans των queries που έχουν γίνει compile μόνο της βάσης που μας ενδιαφέρει (σε αντίθεση με την χρήση της DBCC FREEPROCCACHE η οποία καθαρίζει την cache ολόκληρου του instance).
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;