Λοιπόν, ας πούμε για το πρώτο DBCC. Έχουμε και λέμε:
Αποτελείται από 1431 σελίδες. Κάθε σελίδα, ιδανικά, χωράει 8ΚΒ αλλά πολλές φορές δεν μπορούμε να εκμεταλλευτούμε όλον τον χώρο καθώς θα πρέπει να περιέχει ακέραιο αριθμό εγγραφών, οπότε αν δεν χωράει μια εγγραφή στον περισευούμενο χώρο πηγαίνει στην επόμενη σελίδα.
Οι σελίδες οργανώνονται σε "extents". Κάθε extent περιέχει 8 σελίδες, όμως όχι απαραίτητα από τον ίδιο πίνακα. Απλουστευμένα, αυτό που κάνει το DBCC SHOWCONTIG είναι να διαβάζει όλες τις εγγραφές στη σειρά και να μετράει πόσες φορές αναγκάστηκε να κάνει jump (switch) γιατί δεν βρήκε την εγγραφή που περίμενε αλλά κάποια άλλη. Αυτό το switch μπορεί να γίνει από page σε page μέσα στο ίδιο extent ή από page σε page σε διαφορετικό extent. To πλήθος των switches είναι και ο δείκτης του fragmentation σε έναν πίνακα.
Γυρίζοντας στο παράδειγμα, έχουμε 182 extents και 181 switches, δηλαδή ιδανική κατάσταση.
Επίσης, τα extents είναι σχεδόν πλήρη (7.9 Avg. Pages per Extent), πράγμα πολύ καλό.
Οι 1431 σελίδες είναι (ιδανικά) 179 extents άρα αυτό που έχουμε σε σχέση με τα 179, δηλαδή το Scan Density είναι πολύ καλό στο 98.35%.
Τώρα, ως προς το Logical Scan Fragmentation και το Extent Scan Fragmentation.
Αυτά τα νούμερα έχουν νόημα όταν έχουμε τουλάχιστον ένα clustered index πάνω στον πίνακα. Είναι λίγο δύσκολο να εξηγήσω πως βγαίνει αυτή η τιμή καθώς θα πρέπει να γράψω αρκετά περί IAM pages, page pointers, κλπ. Γενικά, αυτά τα νούμερα δείχνουν πόσο καλά είναι οργανωμένo το clustered index του πίνακα και όσο πιο κοντά στο μηδέν είναι η τιμή, τόσο το καλύτερο.
Τέλος, το Avg. Bytes Free per Page και το Avg. Page Density δείχνουν τον ελεύθερο χώρο κατά μέσο όρο και την πυκνότητα των σελίδων αλλά εδώ θέλει προσοχή. Ο SQL Server κάνει τα I/O operations ανά σελίδα. Δηλαδή αν θέλω να διαβάσω έστω και μία εγγραφή θα διαβάσω (υποχρεωτικά) και τις υπόλοιπες της ίδιας σελίδας. Έτσι, όσο πιο γεμάτη είναι μια σελίδα, τόσες περισσότερες εγγραφές διαβάζω με ένα read, τουτέστιν αν θέλω να διαβάσω όλον τον πίνακα θα χρειαστώ λιγότερα I/O's,. Προσοχή όμως! Αυτό δεν είναι απαραίτητα καλό, γιατί αν κάνω πολλά write operations, τότε οι γεμάτες σελίδες θα έχουν ως αποτέλεσμα πολλαπλά page splits (όταν έχω clustered index σε μια σελίδα και προσπαθώ να εισάγω μια εγγραφή, αυτή θα πρέπει να πάει σε συγκεκριμένη θέση, οπότε αν δεν χωράει θα σπάσει τη σελίδα σε δύο μοιράζοντας τις εγγραφές) που έχουν κόστος.
Άρα, καλά τα νουμεράκια που λέει το DBCC SHOWCONTIG αλλά προσοχή στην ερμηνεία τους γιατί το αν είναι καλό ή κακό ένα αποτέλεσμα εξαρτάται πολύ από την χρήση του πίνακα.
Vir prudens non contra ventum mingit