Overview
Ένα SQL Server Analysis Services (SSAS) Tabular model (TM) χρησιμοποιεί το column oriented xVelocity in-memory analytics engine (το οποίο ήταν γνωστό σαν Vertipaq engine πριν την έκδοση των SSAS 2012) το οποίο προσφέρει εξαιρετική απόδοση αλλά έχει συγκεκριμένες απαιτήσεις σε storage, μνήμη και επεξεργαστική ισχύ.
Επειδή συχνά πελάτες και μαθητές μου με ρωτάνε για αυτό και από όσα έχω δει αρκετά λάθη έχουν γίνει τα οποία δυστυχώς έχουν χρηματικό κόστος αρχικά μετά ακολουθούν τα άλλα κόστη, είπα να γράψω κάποια πράγματα ώστε η κατάσταση αυτή να γίνει κάπως καλύτερη.
Η επιλογή του hardware με σκοπό να εξυπηρετήσει SSAS-TM είναι κάτι που πρέπει να γίνει με προσοχή καθώς οι απαιτήσεις που αυτό έχει είναι παντελώς διαφορετικές από τις ανάγκες που έχει ένα Multidimensional model πόσο μάλλον από τις ανάγκες που έχει ένα relational engine.
Δυστυχώς τις περισσότερες φορές η επιλογή που γίνεται είναι λάθος και αυτό έχει σοβαρές συνέπειες στην χρήση των Tabular models.
Σε όσα αναφερθούν παρακάτω υπάρχει η παραδοχή ότι σκοπός είναι να δημιουργηθεί ένα SSAS-TM server instance και μόνο χωρίς αστεράκια ή άλλες εξαιρέσεις και καλό είναι να το σκεφτούμε αυτό όταν χτίζουμε την υποδομή μας.
Storage και Ι/Ο
Ένα SSAS-TM έχει πάντα τα πάντα στην μνήμη άρα πρέπει να γίνει κατανοητό το πότε γίνεται χρήση του disk I/O.
Όταν ξεκινάει το SSAS service μόνο τα metadata των databases που είναι σε αυτό διαβάζονται από το δίσκο.
Την στιγμή όμως που σε όποια database διαβάζουμε το όποιο object της τότε όλη η database διαβάζεται από το δίσκο και φορτώνεται στην μνήμη και ποτέ πλέον δεν φεύγει από αυτή. (όταν λέω όλη εννοώ όλη χωρίς αστεράκια).
Αυτό σημαίνει ότι σε αυτή την φάση ο χρόνος που θα χρειαστεί είναι συνάρτηση το sequential I/O performance και του data transfer rate που έχει ο δίσκος.
Επίσης ακόμα μια διαδικασία που χρειάζεται να έχω disk operations είναι κάθε φορά που κάνω processing την databases όπου εδώ έχω write/read concurrent και sequential operations για κάθε αρχείο της database το οποίο γίνεται από την αρχή του μέχρι το τέλος του.
Επίσης ο δίσκος δεν έχει καμία επίδραση στα queries καθώς όλα είναι στην μνήμη.
Random I/O δεν χρησιμοποιείται στα SSAS-TMs για αυτό πρέπει να δώσετε βάση στο Sequential I/O των δίσκων. Η μόνη περίπτωση που μπορεί να έχω random I/O είναι μόνο αυτή όπου όταν κάνω process operation και δεν έχω αρκετή μνήμη και τα παλιά δεδομένα πρέπει να αντικατασταθούν από τα νέα τότε έχω paging το οποίο φυσικά είναι random I/O.
Με όλα αυτά στο μυαλό μας καταλαβαίνουμε ότι τα χρήματα μας δεν πρέπει να τα ξοδέψουμε σε storage αλλά στα επόμενα που ακολουθούν.
Memory
Η μνήμη είναι το απόλυτα σημαντικό resource για ένα SSAS-TM instance, όχι μόνο γιατί όλα τα δεδομένα είναι στην μνήμη αλλά και γιατί χρειάζεται σε αυτή να δημιουργηθούν temporary structures για να απαντηθούν περίπλοκα ερωτήματα.
Υπάρχει o ελάχιστος κανόνας για την μνήμη του 1,5X του μεγέθους των δεδομένων στο δίσκο. Με αυτόν όμως το κανόνα δεν εξασφαλίζουμε ότι δεν θα έχουμε paging κατά την διάρκεια ενός process operation.
Για αυτό αλλά και γιατί είναι αρκετά δύσκολο να κάνουμε εκτίμηση χωρίς να έχουμε κάποια δεδομένα από ένα UAT περιβάλλον για το πόση temporary memory θα χρειαστούν τα ερωτήματα των χρηστών, επιλέγουμε να έχουμε τουλάχιστον 3Χ το μέγεθος των δεδομένων στο δίσκο της εκάστοτε database.
Όπως όλα τα δάκτυλα του χεριού δεν είναι ίσια έτσι και όλες οι μνήμες δεν είναι το ίδιο. Για τα SSAS-TM το memory bandwidth είναι αρκετά σημαντικό καθώς είναι αυτό που μεταφέρει τα δεδομένα από την RAM στην CPU και για αυτό θα πρέπει να επιλεχθεί ότι καλύτερο σε ταχύτητα στην μνήμη. Η ταχύτητα της μνήμης είναι πολύ σημαντικότερη από την ταχύτητα της CPU.
CPU
Βασικό στοιχείο επιλογής CPU για τα SSAS-TM είναι η L2 cache. Όσο μεγαλύτερη τόσο καλύτερο performance έχει ο xVelocity.
Αυτό σημαίνει ότι αν πρέπει να επιλέξω μεταξύ δύο CPU επιλέγω αυτή που έχει την μεγαλύτερη L2 cache ακόμα και αν είναι χαμηλότερη σε ταχύτητα από την άλλη.
Στα άλλα SQL Server services έχουμε πει ότι η NUMA αρχιτεκτονική είναι επιθυμητή όμως τα SSAS-TM δεν είναι NUMA aware και για αυτό το λόγο θέλουμε να τρέχουν σε processors που είναι στο ίδιο NUMA και μόνο. Για αυτό αν έχουμε ένα server που τρέχουν και άλλα services που επωφελούνται από τη NUMA αρχιτεκτονική θα πρέπει να ρυθμίσουμε τα SSAS-TM να "παίζουν" με ένα NUMA.
Ακόμα ένα στοιχείο που θα πρέπει να ληφθεί υπόψη είναι ότι Hyperthreading επηρεάζει αρνητικά το xVelocity performance επειδή η L2 cache μοιράζεται μεταξύ των concurrent threads και αυτό μειώνει την απόδοση του. Είναι καλή πρακτική αν έχω ένα server ο οποίος είναι αποκλειστικά για SSAS-TM να κάνουμε disable το hyperthreading.
Conclusion
Με βάση όλα τα παραπάνω νομίζω ότι η επιλογή hardware γίνεται ευκολότερη για να εξυπηρετηθούν SSAS-TM
//antonch