Efficient schema changes

Έχουν δημοσιευτεί 23 Δεκεμβρίου 06 12:38 πμ | KelMan 

Σήμερα έδωσα το exam 70-431 καθώς χρειάζεται να κάνω upgrade το MCDBA certification μου. Γενικά δεν ήταν δύσκολο, ωστόσο αφορμή για αυτό το post ήταν μια ερώτηση που μου έκανε εντύπωση. Έλεγε ότι υπάρχει ένας πίνακας με προϊόντα και θέλουμε να προσθέσουμε ένα νέο πεδίο. Ποιος είναι ο ποιο efficient τρόπος για να γίνει αυτό; Και είχε τέσσερις διαφορετικές λύσεις. Αυτό που σκέφτηκα αμέσως είναι ότι αυτή η ερώτηση είναι ασαφής γιατί δεν προσδιορίζει τι μέγεθος έχει ο πίνακας. Αν έχει για παράδειγμα 1.000, 10.000 ή 1.000.000 εγγραφές.

Πέρυσι είχα αναλάβει ένα performance tuning για έναν SQL Server που είχε έναν αντίστοιχο πίνακα με προϊόντα μόνο που είχε μερικά εκατομμύρια εγγραφές. Σε τέτοιες περιπτώσεις τα queries που δοκιμάζεις στον πίνακα θέλουν προσοχή γιατί αργούν να ολοκληρωθούν. Μια αλλαγή στα indexes απαιτεί και αυτή αρκετή ώρα για να ολοκληρωθεί. Γι αυτόν τον λόγο πρέπει όλα να γίνονται προσεκτικά ώστε να μην χάνεται τσάμπα χρόνος. Το ίδιο ισχύει και όταν συμβαίνουν αλλαγές στο schema. Για παράδειγμα, μπορεί να απαιτηθεί να γίνει προσθήκη ενός πεδίου. Κάτι τέτοιο μπορεί να γίνει με πολλούς τρόπους, όπως:

  • Πεδίο NULL (με ή χωρίς DEFAULT)
  • Πεδίο NOT NULL και DEFAULT
  • Πεδίο με NULL και DEFAULT με WITH VALUES option
  • Πεδίο με NULL και DEFAULT με WITH VALUES option και με CHECK constraint

Καθένας από τους παραπάνω τρόπους έχει διαφορετική επίδραση στον πίνακα και τελείως διαφορετικό χρόνο εκτέλεσης, πράγμα που δεν φαίνεται σε πίνακες με μερικές χιλιάδες εγγραφές αλλά γίνεται πολύ αισθητό όταν υπάρχουν εκατομμύρια.

Το σενάριο αυτό λοιπόν, μου θύμισε όταν κατά τη διάρκεια εκείνου του performance tuning χρειάστηκε να μειώσω το μέγεθος ενός πεδίου. Ένα απλό ALTER COLUMN δεν ήταν καθόλου efficient καθώς θα κλείδωνε τον πίνακα για αρκετή ώρα μέχρι να ενημερώσει τις νέες εγγραφές. Έτσι, σκέφτηκα έναν τρόπο για να γίνει πιο efficiently η διαδικασία. Υπομονή μέχρι το επόμενο post...

 

Σχόλια:

# Manos Kelaiditis' Weblog said on Ιανουαρίου 16, 2007 11:40 πμ:
Σε προηγούμενο post Efficient schema changes είχα αναφέρει το πόσο χρονοβόρα μπορεί να γίνει μια διαδικασία...
# Manos Kelaiditis' Weblog said on Φεβρουαρίου 5, 2007 8:41 πμ:

Σε προηγούμενο post Efficient schema changes είχα αναφέρει το πόσο χρονοβόρα μπορεί να γίνει μια διαδικασία

Έχει απενεργοποιηθεί η προσθήκη σχολίων από ανώνυμα μέλη

Search

Go

Συνδρομές