Microsoft SQL Server

O SQL Server (προφέρεται «σίκουελ σέρβερ») είναι μια σχεσιακή βάση δεδομένων, η οποία αναπτύσσεται από τη Microsoft. Οι κύριες γλώσσες που χρησιμοποιούνται είναι η T-SQL και η ANSI SQL. O SQL Server βγήκε για πρώτη φορά στην αγορά το 1989 σε συνεργασία με την Sybase.
Η κύρια μονάδα αποθήκευσης στοιχείων είναι μια βάση δεδομένων, η οποία αποτελείται από μια συλλογή πινάκων και κώδικα.

Αποθήκευση

Η κεντρική βάση δεδομένων του SQL υποστηρίζει διαφορετικούς τύπους, συμπεριλαμβανομένων των ακεραίων αριθμών, αριθμών κινητής υποδιαστολής, δεκαδικών, αλφαριθμητικών, Varchar (σειρές χαρακτήρων μεταβλητού μήκους), δυαδικών αριθμών (για τα μη δομημένα δεδομένα), κειμένων (για κείμενα). 
Επιτρέπει επίσης καθορισμένους από το χρήστη σύνθετους τύπους δεδομένων (UDTs), δηλαδή τύπους που βασίζονται στους βασικούς τύπους αλλά μπορούν να τροποποιηθούν. Τα στοιχεία στη βάση δεδομένων αποθηκεύονται σε ένα (ή περισσότερα) αρχεία με επέκταση .mdf.
Τα δευτεροβάθμια στοιχεία αποθηκεύονται στο αρχείο με επέκταση .ndf. To αρχείο καταγραφής το οποίο περιέχει όλες τις πρόσφατες αλλαγές στη βάση δεδομένων αποθηκεύεται σε αρχείο με επέκταση .ldf. 
Ο χώρος αποθήκευσης που διατίθεται σε μια βάση δεδομένων διαιρείται σε διαδοχικά αριθμημένες σελίδες, κάθε μία από τις οποίες έχει μέγεθος 8 KB.

Ενδιάμεση μνήμη

Οι σελίδες αποθηκεύονται στην ενδιάμεση (buffer) μνήμη RAM για να ελαχιστοποιηθεί η μεταφορά δεδομένων προς και από τον σκληρό δίσκο. Οποιαδήποτε σελίδα 8 KB μπορεί να είναι αποθηκευμένη στη μνήμη, και το σύνολο όλων των σελίδων που αποθηκεύονται σε μία περίοδο καλείται λανθάνουσα μνήμη (cache).
Το ποσό μνήμης που είναι διαθέσιμο στον κεντρικό διακομιστή SQL αποφασίζει πόσες σελίδες θα εναποθηκευθούν στη λανθάνουσα μνήμη. O SQL Server έχει διαφορετικούς και έξυπνους αλγόριθμους για την καλύτερη απόδοση της λανθάνουσας μνήμης. 
Ο κεντρικός διακομιστής SQL εξασφαλίζει ότι οποιαδήποτε αλλαγή στα στοιχεία είναι "ACID", δηλ. χρησιμοποιεί τις "συναλλαγές" (transactions) που εξασφαλίζουν ότι οποιαδήποτε λειτουργία είτε ολοκληρώνεται συνολικά είτε αποτυγχάνει συνολικά, αλλά δεν αφήνει ποτέ τη βάση δεδομένων σε μία ενδιάμεση κατάσταση. 
Χρησιμοποιώντας τις συναλλαγές αυτές, μια ακολουθία εντολών μπορεί να αποτελέσει μία ομάδα, με την προϋπόθεση ότι είτε όλες οι εντολές θα πετύχουν ή καμία δεν θα πετύχει. Ο κεντρικός διακομιστής SQL επιτρέπει σε πολλούς πελάτες να χρησιμοποιούν την ίδια βάση δεδομένων ταυτόχρονα. 
Υπό αυτήν τη μορφή, θα πρέπει να ελέγξει την ταυτόχρονη πρόσβαση στα κοινά στοιχεία, για να εξασφαλίσει την ακεραιότητα των στοιχείων – Π.χ όταν πολλαπλάσιοι πελάτες ενημερώνουν τα ίδια στοιχείο, ή οι πελάτες προσπαθούν να διαβάσουν ένα στοιχείο το οποίο αλλάζεται από έναν άλλο πελάτη.

Ταυτοχρονισμός

Ο κεντρικός διακομιστής SQL παρέχει δύο τρόπους ελέγχου του ταυτοχρονισμού: απαισιόδοξος ταυτοχρονισμός και αισιόδοξος ταυτοχρονισμός. 
Όταν ο απαισιόδοξος έλεγχος ταυτοχρονισμού χρησιμοποιείται, ο κεντρικός διακομιστής SQL ελέγχει την ταυτόχρονη πρόσβαση με τη χρησιμοποίηση κλειδώματος (locks). Τα κλειδώματα μπορούν είτε να διαμοιράζονται είτε να είναι αποκλειστικά. Το αποκλειστικό κλείδωμα χορηγεί στο χρήστη την αποκλειστική πρόσβαση στα στοιχεία (συνήθως κατά την αλλαγή στοιχείων) - κανένας άλλος χρήστης δεν μπορεί να έχει πρόσβαση στα στοιχεία εφόσον υπάρχει κλείδωμα. Το κοινό κλείδωμα χρησιμοποιείται όταν διαβάζεται κάποιο στοιχείο - πολλαπλοί χρήστες μπορούν να διαβάσουν από τα στοιχεία που κλειδώνονται με ένα κοινό κλείδωμα, αλλά να μην αποκτούν αποκλειστικό.
Το κλείδωμα μπορεί να εφαρμοστεί σε διαφορετικά επίπεδα - σε ολόκληρους πίνακες, σελίδες ή ακόμα και σε διαφορετικές γραμμές. Το επίπεδο που χρησιμοποιείται καθορίζεται σε μια βάση δεδομένων από περίπλοκους αλγόριθμους του SQL Server, οι οποίοι έχουν σκοπό την γρηγορότερη και καλύτερη λειτουργία από χιλιάδες χρήστες η ακόμη και εκατοντάδες χιλιάδες την ίδια στιγμή. Ενας SQL Server είναι δυνατόν να πραγματοποιήσει μέχρι και 1.000.000 transactions το δευτερόλεπτο με το ανάλογο υλικό. O SQL Server λειτουργεί σε 32 η 64 bit και υποστηρίζει μέχρι και 256 πυρήνες (CPU) Τυπική χρήση είναι οι 8-16 επεξεργαστές.

Ανάκτηση δεδομένων

Η ερώτηση (query) είναι ο κύριος τρόπος για την ανάκτηση στοιχείων από μια βάση δεδομένων. Η ερώτηση εκφράζεται χρησιμοποιώντας μια παραλλαγή της αποκαλούμενου SQL Τ-SQL, είναι μια διάλεκτος SQL που αναπτύχθηκε από την Microsoft και Sybase. H T-SQL είναι πολύ κοντά στα ANSI standards που έχουν καθιερωθεί διεθνώς, σε αντιδιαστολή με άλλες διαλέκτους όπως η PL-SQL της Oracle που διαφέρουν περισσότερο από το ANSI standards.
Η ερώτηση διευκρινίζει επεξηγηματικά αυτό που είναι να ανακτηθεί από την βάση δεδομένων. Η ερώτηση υποβάλλεται σε επεξεργασία από τον επεξεργαστή ερώτησης, ο οποίος υπολογίζει τη σειρά των βημάτων που θα είναι απαραίτητα για να ανακτηθούν τα ζητούμενα στοιχεία. Η ακολουθία ενεργειών απαραίτητων να εκτελέσουν μια ερώτηση καλείται σχέδιο ερώτησης. 
Υπάρχουν πολλοί τρόποι για να υποβληθεί σε επεξεργασία η ίδια ερώτηση. Π.χ, μια ερώτηση που ενώνει 2 πίνακες Α & Β μαζί θα μπορούσε να γίνει ή πηγαίνωντας πρώτα στο Α βρισκοντας τα στοιχεία και μετά ενώνοντας με τα στοιχεία του πίνακα Β, ή πρώτα από το Β και μετά πίνακα Α. Ο SQL Server και όχι ο Προγραμματιστής παίρνει την απόφαση μέσω στατιστικών στοιχείων και άλλων στοιχείων που διαθέτει για τους 2 πίνακες να ακολουθήσει την διαδρομή Α-Β γιατί αυτός είναι ο γρηγορότερος τρόπος. Στις procedural γλώσσες προγραμματισμού πχ C, Pascal, .NET, ο προγραμματιστής θα πρέπει να κάνει την απόφαση το οποίο πολλές φορές σημαίνει λάθος απόφαση. Αυτό καλείται βελτιστοποίηση ερώτησης και εκτελείται από τον επεξεργαστή ερώτησης. Ο SQL παίρνει πολύ περίπλοκες αποφάσεις βασισμένος σε αλγόριθμους που έχουν αναπτυχθεί τα τελευταία 20-30 χρόνια πάνω στο αντικείμενο. Μια παρόμοια ερώτηση σε μια προηγούμενη έκδοση του SQL Server θα μπορούσε να πάρει 10-20 φορές περισσότερο χρόνο λόγω του διαφορετικού αλγόριθμου. Γενικά κάθε καινούργια έκδοση βελτιώνει την αποτελεσματικότητα, και άρα τον χρόνο εκτέλεσης. Εδώ ακριβώς είναι ένα από το πλεονεκτήματα προγραμματισμού ενός προβλήματος σε μια βαση δεδομένων σε σύγκριση με C, Pascal, C++ κτλ. Βέβαια όλα τα προβλήματα δεν είναι κατάλληλα για εφαρμογή σε βάση δεδομένων.
Ο SQL Server επιτρέπει επίσης αποθηκευμένες ερωτήσεις (stored procedures). Οι αποθηκευμένες ερωτήσεις είναι ερωτήσεις με παραμέτρους T-SQL, οι οποίες αποθηκεύονται στον SQL Server. Μια stored procedure τυπικά είναι από 100-1000 γραμμές κώδικα SQL. Οι αποθηκευμένες ερωτήσεις μπορούν να δεχτούν τιμές που στέλνονται από τον πελάτη ως παράμετροι εισαγωγής, και να στείλουν τα αποτελέσματα ως παραμέτρους παραγωγής. Μπορούν να καλέσουν functions, και άλλες stored procedures. Οι stored procedures είναι γρηγορότερες από κατασκευή σε σχέση με απλές ακολουθίες SQL.

CLR

O Microsoft SQL Server 2005 – 2008 περιλαμβάνει ένα module (δηλαδή μονάδα μέτρησης) που λέγεται SQL CLR μέσω του οποίου ενσωματώνει τo .NET μέσα στον SQL Server. 
Με το SQL CLR, οι αποθηκευμένες διαδικασίες μπορούν να γραφτούν σε οποιαδήποτε γλώσσα .NET συμπεριλαμβανομένου C# και VB.NET και να δημιουργήσουν μια stored procedure (αποθηκευμένη διαδικασία). Αυτό σημαίνει ότι ο SQL Server έχει όλες τις βιβλιοθήκες και πλεονεκτήματα του .ΝΕΤ, αυτόχθονα μέσα στο περιβάλλον του, τα οποία μπορεί να τα καλέσει οποιαδήποτε στιγμή.