Πώς κάνουμε σωστά μία εγκατάσταση SQL Server
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
Σε αυτό το άρθρο θα αναλύσουμε πως πρέπει να γίνεται μία καινούργια εγκατάσταση SQL Server βήμα βήμα. Συγκεκριμένα θα δούμε το setup για SQL Server 2019. Επίσης θα δούμε τι απαιτείται να έχουμε κάνει πριν ξεκινήσουμε την εγκατάσταση και τι πρέπει να προσέξουμε ώστε να έχουμε όσο το δυνατόν μεγαλύτερη ασφάλεια και απόδοση.
Προαπαιτούμενα
Θα πρέπει να κατεβάσουμε το setup για την εγκατάσταση του SQL Server 2019. Tο βρίσκουμε απευθείας από την Microsoft εδώ.
Για την εγκατάσταση θα χρειαστούμε έναν local admin λογαριασμό με το οποίον θα συνδεθούμε πριν τρέξουμε το setup.
Ως minimum θα πρέπει να έχει τα παρακάτω δικαιώματα:
- Act as part of the operating system
- Backup Files & Directories
- Debug Programs
- Manage Auditing & Security Log
Για να σηκώσουμε τα Database Engine και Agent services θα χρειαστούμε Active Directory Domain Service Account ή Managed Service Account με τα παρακάτω δικαιώματα:
- Act as part of the operating system
- Lock Pages in Memory
- Perform Volume Maintenance Tasks
- Bypass Traverse Checking
- Replace A Process Level Token
- Adjust Memory Quotas For A Process
Επίσης θα χρειαστούμε ξεχωριστούς δίσκους που θα μας βοηθήσουν στην διαχείριση και αναλόγος του τι storage έχουμε ίσως και στο performance.
Οι δίσκοι θα πρέπει να είναι χωρισμένοι όπως παρακάτω:
- Στο C drive θα είναι η εγκατάσταση εκτός του λειτουργικού και των binaries του SQL Server.
- Στο D drive θα έχουμε τα datafiles των user databases και αν δεν έχουμε ξεχωριστό δίσκο για τα backups μπορούμε να τα βάζουμε και αυτά σε έναν φάκελο εκεί (συνήθως τα backups τα πέρνουμε σε backup server οπότε δεν χρειαζόμαστε πάντα ξεχωριστό δίσκο στο ίδιο το μηχάνημα).
- Στο L drive θα έχουμε τα transaction log files.
- Στο S drive θα έχουμε τα αρχεία των system databases (master, msdb, model).
- Στο T drive θα έχουμε τα αρχεία της system database TempDB που γίνεται recreate κάθε φορά που ξεκινάει το SQL Server instance.
Η εγκατάσταση
Ξεκινώντας το setup θα πάμε στην καρτέλα Installation και θα επιλέξουμε την πρώτη επίλογή New SQL Server stand-alone installation or add features to an existing installation.
Στην επόμενη οθόνη περιμένουμε ότι ειναι οκ οι έλεγχοι και πατάμε ΟΚ.
Στην επόμενη οθόνη επιλέγουμε την πρώτη επιλογή Perform a new installation of SQL Server 2019, η δεύτερη είναι αν θέλουμε να προσθέσουμε κάποιο feature σε προηγούμενη εγκατάσταση π.χ Polybase.
Στην επόμενη οθόνη διαλέγουμε την έκδοση που θα κάνουμε εγκατάσταση, για το παράδειγμα θα επιλέξω Developer που είναι δωρεάν για δοκιμαστικούς σκοπούς. Ανάλογα με την έκδοση που κάνουμε εγκατάσταση υπάρχει διαφορετικό κόστος και είναι ενεργοποιημένα διαφορετικά features. Για παραγωγική χρήση δωρεάν είναι μόνο η έκδοση Express η οποία έχει αρκετούς περιορισμούς.
Τις διαφορές ανά έκδοση μπορούμε να τις διαβάσουμε αναλυτικά εδώ.
Στην επόμενη καρτέλα επιλέγουμε τα Database Engine Services. Τα άλλα feature είναι προαιρετικά.
Το instance root directory ορίζει που θα γίνουν εγκατάσταση οι system databases, εκεί τις ορίζουμε ξεχωριστό δίσκο π.χ S:\systemdb\:
Στη συνέχεια επιλέγουμε αν θα χρησιμοποιήσουμε το default instance και θα κάνουμε connect με το servername ή θα χρησιμοποιήσουμε named instance και θα κάνουμε connect με servername\instancename. Το αφήνουμε στο default.
Στην επόμενη οθόνη ορίζουμε τα service accounts που θα σηκώνουν το service του Database Engine και του Agent (που τρέχει τα jobs). Εκεί θα πρέπει να χρησιμοποιήσουμε το service account που φτιάξαμε στα προαπαιτούμενα. Έπειτα βάζουμε το startup type σε Automatic ώστε τα services να σηκώνονται μόνα τους σε περίπτωση π.χ. restart του μηχανήματος.
*Σε περίπτωση που δεν μας έχουν φτιάξει ακόμα το service account και αφήσουμε το local default επιλέγουμε το Grant Perform Volume Maintenance Task.
Στην δεύτερο tab με το Collation βάζουμε το Greek_CI_AS (το default encoding που θα έχουν οι βάσεις). Για να επιλεγεί αυτό επιλέγουμε Customize, Greek και OK.
Στην επόμενη οθόνη στην καρτέλα Server Configuration ορίζουμε πως θα κάνουμε login στο instance. Επιλέγουμε add current user ώστε ο χρήστης με τον οποίον κάνουμε το install να είναι super admin. Επίσης μπορούμε να επιλέξουμε mixed mode ώστε να προσθέσουμε και ένα sql login (sa) που θα είναι super admin .
Στην καρτέλα Data Directories ορίζουμε σε ποιόν δίσκο που θα αποθηκεύεται το κάθε τι ως default. Στο πρώτο πεδίο το root folder όλων το path (από την στιγμή που το καθένα θα είναι σε διαφορετικό δίσκο δεν έχει σημασία), στο δεύτερο που θα είναι τα database files των user databases, στο τρίτο που θα είναι transaction log files των user databases και στο τελευταίο ποιο θα είναι το location για όταν κάνουμε backup.
Στην καρτέλα TempDB κάνουμε remove ότι μπορεί να έχει και Add το path με τον δίσκο που θα φτιάχνετε η tempDB, στην περίπτωση μας στο drive T. Βάζουμε και το αντίστοιχο path για το transaction log file της tempDB.
Από default βλέπουμε ότι έχει επιλέξει να φτιάξει 8 datafiles για την tempDB, δεν χρειάζεται να το πειράξουμε.
Στη καρτέλα MaxDOP ορίζουμε το μέγιστο βαθμό παραλληλίας σε cpu logical cores ενός query. Στον SQL Server 2019 μας προτείνει μόνο του, π.χ με 8 logical cores μας προτείνει MaxDOP 8. Αν όμως στο ίδιο μηχάνημα έχουμε κάνει εγκατάσταση και άλλο instance δεν θα θέλαμε να έχει την δυνατότητα να κάνει χρήση 8 logical cores και ίσως είναι καλύτερο το 4. Επίσης θα πρέπει να θυμόμαστε ότι αν δώσουμε παραπάνω logical cores στο μηχάνημα δεν θα χρησιμοποιήσει ποτέ παραπάνω από 4 οπότε αν θέλουμε χωρίς να αλλάξουμε το setting να χρησιμοποιεί μέχρι όσα logical cores έχει θα πρέπει να το ορίσουμε ως 0.
Αναλυτικά τι τιμή προτείνει η Microsoft ανά περίπτωση μπορούμε να το δούμε εδώ.
Στη καρτέλα Memory ορίζουμε το Max Server Memory (RAM) που θα κάνει χρήση το SQL Server instance. Ένα instance όταν ξεκινάει καταλαμβάνει χώρο από την μνήμη και όταν χρειαστεί καταλαμβάνει περισσότερο το οποίο θα το αποδεσμεύση μόνο όταν κάνουμε restart το instance.
Aφήνουμε πάντα τουλάχιστον 4 GB ελεύθερα για το λειτουργικό σύστημα.
Στο παράδειγμα έχουμε 16 GB RAM και προτείνει 12 GB. Φυσικά αν έχουμε πολλαπλά instances θα πρέπει το 12 αυτό να το χωρίσουμε ανάλογα. Επίσης ορίζουμε 1024 MB να καταλαμβάνει εξαρχής αυτή τη μνήμη το instance με το που ξεκινήσει (Min Server Memory).
*Για να αποδεχθεί τις τιμές που βάλαμε θα πρέπει να επιλέξουμε και το checkbox.
Έπειτα αφού βεβαιωθούμε από το Summary ότι δεν ξεχάσαμε κάτι προχωράμε στο Install.
Για να συνδεθούμε τώρα στο SQL Server Instance μπορούμε να το κάνουμε πέρα από το Command Prompt με την χρήση του SQL Server Management Studio (DBA oriented) ή με το Azure Data Studio (Developer/Analysts oriented).
Patching με την τελευταία αναβάθμιση
Δεν τελειώσαμε όμως εδώ. Θα πρέπει να εγκαταστήσουμε το latest Cumulative Update που διορθώνει ότι bug και ότι security risk έχει προκύψει (επίσης μπορεί να προσθέσει και καινούργια features) .
Μπορούμε να κατεβάσουμε απευθείας απο την Microsoft το latest για τον SQL Server 2019 από εδώ.
Η διαδικασία είναι πολύ απλή με έναν next next Wizard.
Πώς συνδεόμαστε απομακρυσμένα
Τελειώσαμε την εγκατάσταση όμως θέλουμε να συνδεθούμε.
Για να μπορούμε να συνδεθούμε δικτυακά από άλλον υπολογιστή, πέρα από φυσικά θα πρέπει να έχουμε ανοίξει στο firewall τις πόρτες 1433/1434 που είναι οι default.
Επίσης θα πρέπει να πάμε στο εργαλείο Sql Server Configuration Manager που έγινε εγκατάσταση μαζί με τον SQL Server.
Να πάμε στην καρτέλα Protocols for … κάτω από το SQL Server Network Configuration. Εκεί επιλέγουμε το TCP/IP και στην καρτέλα Protocol στο Enabled βάζουμε Yes (αν δεν είναι ήδη) .
Security through obscurity
Όπως είπαμε πριν η default πόρτα του SQL Server είναι 1433. Μπορούμε όμως να την αλλάξουμε ώστε να μην μπορεί να συνδεθεί κάποιος που απλά βάζει στο connection το servername και να χρειάζεται το servername και μια πόρτα που δεν θα ξέρει ποια είναι. π.χ servername,1833.
Για να κάνουμε αυτή την αλλαγή στο εργαλείο Sql Server Configuration Manager που είδαμε πριν. Πάμε στην καρτέλα Protocols for … κάτω από το SQL Server Network Configuration. Εκεί επιλέγουμε το TCP/IP και στην καρτέλα IP Addresses σε όλα τα πεδία TCP Port ορίζουμε την πόρτα που θέλουμε.
*Δεν ξεχνάμε να ανοίξουμε αυτή την πόρτα και στο firewall.
Για να ισχύσουν αυτές οι αλλαγές πρέπει να πάμε στην καρτέλα SQL Server Services να βρούμε το service του Database Engine και να κάνουμε δεξί κλικ Restart.
Some more Performance Tweaks Recommendations
Πέρα από ότι επιλογές κάναμε κατά την εγκατάσταση με το γραφικό, για την καλύτερη δυνατή απόδοση προτείνετε να πειράξουμε με T-SQL άλλες δύο παραμέτρους.
Η μία είναι το cost threshold for parallelism που ορίζει από πόσο “κόστος”* και πάνω επιτρέπει ένα query να ανοίξει παραλληλία. Όταν η τιμή είναι χαμηλή, ο SQL Server δημιουργεί πλάνο για παράλληλη εκτέλεση και σε “ελαφριά” queries. Αυτό μπορεί να έχει σαν αποτέλεσμα το ένα thread να περιμένει το άλλο να τελειώσει ώστε να επιστρέψει το αποτέλεσμα του query. Αυτή τη καθυστέρηση την βλέπουμε ως CXPACKET wait type. Για αυτό προτείνετε να αλλάξει η τιμή από 5 που είναι το default σε 50.
*Ως “κόστος” είναι τα δευτερόλεπτα που εκτιμάται ότι θα έκανε το query αν έτρεχε σειριακά χωρίς παραλληλία, όχι όμως στον δικό μας Server αλλά σε κάποιο παλιό μηχάνημα που είχε ορίσει η Microsoft τότε.
Επίσης την παράμετρο blocked process threshold που ορίζει τι διάρκειας blocking θα καταγράφονται από alerts, profiler και extended events που αφορούν το blocking. Ορίζοντας ως 10 θα καταγράφει μόνο blockings που είχανε διάρκεια πάνω από 10 δευτερόλεπτα. Το χρειαζόμαστε αν θέλουμε π.χ. να καταγράφουμε τα blockings όπως έχουμε δει στο άρθρο εδώ.
Για εφαρμόσουμε αυτές τις αλλαγές, τρέχουμε σε ένα query window στο instance τα παρακάτω:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'cost threshold for parallelism', 50; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'blocked process threshold (s)', 10; RECONFIGURE WITH OVERRIDE;
Bonus Script 1 (Για Backup / Index Maintenance / Database Integrity Check SQL Server Agent Jobs)
Με το παρακάτω sql script που έχω φτιάξει, με μόνο ένα κλικ, κάνει εγκατάσταση το MaintenanceSolution του Ola Hallengren μαζί με έτοιμα παραμετροποιημένα jobs για Backup ,Database Integrity και Index Optimize με τις βέλτιστες παραμέτρους και χρονοδιάγραμμα.
Τα Backup jobs δημιουργούνται disabled καθώς μπορεί να έχουμε άλλη λύση για backup με 3rd party tool. Επίσης κάνει έλεγχο για Availability Group ώστε να τρέχουν μόνο αν είναι η Preffered Backup Replica (για backup / database integrity) και αν είναι Primary Replica (για Index Optimize).
Το μόνο που χρειάζεται να κάνουμε, είναι να εκτελέσουμε το παρακάτω sql script στο κάθε SQL Server Instance:
Bonus Script 2 (Για εγκατάσταση όλων των monitoring Extended Events)
Με το παρακάτω sql script κάνουμε εγκατάσταση όλων των Extended Events που έχουμε δει αναλυτικά σε άλλα άρθρα εδώ. Αφού πρώτα φτιάξουμε τον φάκελο xevents στο path c:\xevents
που θα γράφονται τα δεδομένα ή αλλάξουμε το path στο sql script:
Bonus Script 3 (Για εγκατάσταση του email alerting)
Με το παρακάτω sql script τροποποιώντας το Profile που είναι ο αποστολέας και τον Operator που είναι ο παραλύπτης των email με τα ανάλογα email, smtp server και credentials, μπορούμε να λαμβάνουμε αυτόματα με email ότι υψηλής κρισιμότητας σφάλματα εμφανίζονται στο Error Log του instance. Όπως έχουμε δει αναλυτικά στο άρθρο εδώ: