Αρκετοί όταν με ρωτούν αν μπορούν να έχουν μια μηχανή στην οποία θα μπορούν να έχουν τον SQL Server μαζί με κάτι άλλο και παίρνουν σταθερά την αρνητική μου απάντηση, φεύγουν με το κεφάλι κατεβασμένο.
Ας το εξηγήσουμε όμως για να έχουμε επιτέλους τεκμηριωμένα.
Όταν ξεκίνησα πριν από 5 χρόνια να γράφω posts για τον SQL Server, αναφέρθηκα αναλυτικά στο SQLOS και το πόσο σημαντικό τμήμα του SQL Server είναι.
Με βάση όλα όσα έχω γράψει σε αυτά τα posts ο SQL Server έχει μόνο ένα active thread ανά CPU. Με αυτό μειώνει τον αριθμό των context switches. Επίσης όλα τα active threads δικαιούνται / παίρνουν ίσο χρόνο στη CPU το οποίο είναι γνωστό σαν quantum.
Ας υποθέσουμε ότι έχουμε ένα server με 8 cores. Ας υποθέσουμε ότι την ίδια χρονική στιγμή ο SQL Server χρησιμοποιεί ταυτόχρονα 8 threads (είναι σε κατάσταση busy). Όπως έχω αναφέρει στα post μου για το SQLOS ο SQL Server έχει τα working threads που είναι πάνω από 200+ ανάλογα με την μνήμη και τα cores. Παρόλα αυτά όμως μόνο 8 από αυτά έχουν δρομολογηθεί να τρέξουν την δεδομένη χρονική στιγμή.
Αν στον server αυτό έχουμε και κάποια άλλη εφαρμογή που εκτελείται και έστω ότι έχει μια εργασία που έχει σπάσει σε 32 threads και που συμπίπτει χρονικά με αυτή του SQL Server τότε ….
Ο SQL Server θα παίρνει χρόνο κάθε 5ο quantum ανά CPU καθώς θα έχω ένα thread από τον SQL Server και τέσσερα από την άλλη εφαρμογή (ανά CPU πάντα).
Ο SQL Server παρόλο που έχει σχεδιαστεί να κάνει ελαχιστοποίηση των context switches και να αυξάνει την απόδοση του σε συστήματα που είναι αποκλειστικά για αυτόν, όταν είναι σε ένα σύστημα με άλλες εφαρμογές που ζητάνε περισσότερα threads από αυτόν, τότε δίνει προτεραιότητα σε αυτές.
Και αυτός είναι ο λόγος που φωνάζουμε ότι ο SQL Server πρέπει να είναι μόνος τους σε ένα server.
/*antonch*/