Τι είναι το Transaction Log και που χρησιμεύει στον SQL Server

Τι είναι το Transaction Log και που χρησιμεύει στον SQL Server
Τι είναι το Transaction Log και που χρησιμεύει στον SQL Server

Σε αυτό το άρθρο θα αναλύσουμε τι είναι το Transaction Log στον Microsoft SQL Server, που χρησιμεύει και τι πρέπει να προσέξουμε.

Τι είναι το Transaction Log

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

Το transaction log περιέχει την κάθε αλλαγή που έχει πραγματοποιηθεί στη βάση όπως insert, update και delete που είναι DML (Data Manipulation Language) actions καθώς και DDL (Data Definition Language) actions όπως alter και create.

Που χρησιμεύει το Transaction Log

To transaction log γίνεται χρήση στις παρακάτω εργασίες:

  • Για το rollback μίας συναλλαγής.
  • Για το recovery του SQL Server instance κατά το startup.
  • Για να κάνουμε restore τη βάση δεδομένων σε Point in Time (σε μία συγκεκριμένη χρονική στιγμή).
  • Για High Availability και Disaster recovery λύσεις όπως Availability Groups, Log shipping και transactional replication.

Τι είναι τα Virtual Log Files (VLF)

Τo transaction log αποτελείται από φυσικά αρχεία στον δίσκο που ονομάζονται transaction log files. Αυτά με την σειρά τους χωρίζονται σε μικρότερες υποομάδες που ονομάζονται Virtual Log Files ή αλλιώς VLF. Κάθε φορά που υπάρχει μία ενεργή συναλλαγή στη βάση αυτή καταγράφεται σε Virtual Log File. Κάθε φορά που το transaction log γεμίζει και κάνει extend δημιουργούνται με τη σειρά τους καινούργια VLFs. Ο πολύ μεγάλος αριθμός VLFs μπορει να οδηγήσει σε καθυστερήσεις σε instance startup, log backups και restore.

Αν δεν έχει περιοριστεί το extend στο transaction log file το αρχείο θα μεγαλώνει αρκεί να έχει χώρο στον δίσκο.

Τι είναι το Transaction Log και που χρησιμεύει στον SQL Server
Πώς είναι η δομή του Transaction Log

Πώς ελευθερώνετε ο χώρος από το transaction log

To transaction log αδείαζει και γεμίζει συνέχεια τα Virtual Log Files. Ο SQL Server από μόνος αδειάζει κατά διαστήματα όσα Virtual Log Files δεν αναγράφουν πλέον ενεργή συναλλαγή (π.χ. έχει ολοκληρωθεί). Αν δεν γινότανε αυτό μετά από κάποιο σημείο το transaction log file αλλά και ο φυσικός δίσκος θα γέμιζαν από χώρο.

Ανάλογα με το Recovery Model που έχουμε ορίσει να λειτουργεί η βάση δεδομένων αλλάζει και το πως θα ελευθερώνεται το transaction log, συγκεκριμένα:

  • Αν η βάση λειτουργεί σε Simple recovery model (που δεν έχει τη δυνατότητα σε Point in Time restore), τότε κατά διαστήματα τρέχει checkpoint καταγράφοντας τις αλλαγές στα datafiles και ελευθερώνει το transaction log από τα ανενεργά Virtual Log Files (που έχουν γίνει οι συναλλαγές τους commit ή rollback).
  • Αν η βάση λειτουργεί σε Full recovery model (που έχει τη δυνατότητα σε Point in Time restore), τότε και πάλι γίνεται checkpoint και ελευθερώνει το transaction log από τα ανενεργά Virtual Log Files αφού όμως πρώτα έχει πραγματοποιηθεί transaction log backup.

Δεν πρέπει να ξεχνάμε όταν η βάση δεδομένων πραγματοποιεί checkpoint, ελευθερώνει τον χώρο του transaction log που είναι ελεύθερο προς χρήση αλλά δεν μειώνει το φυσικό του μέγεθος στον δίσκο. Για να το μειώσουμε θα πρέπει να κάνουμε χρήση της function DBCC SHRINKFILE. Τον τρόπο που γίνεται ολόκληρη η διαδικασία θα την αναλύσουμε σε επόμενο άρθρο.

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση