go backarticles

Articles of SQLschool.gr Team

Let's talk about Backup related wait types

Antonios Chatzipavlis

Overview

Τα backups/restores κατέχουν ένα πολύ σημαντικό μέρος της διαχείρισης μιας database, και είναι απαραίτητα για την επιβίωση του οργανισμού. Τα δεδομένα έχουν γίνει απολύτως σημαντικά για τους οργανισμούς, που αν κάποια καταστροφή προκαλέσει απώλεια δεδομένων, αυτές μπορούν να χάσουν μεγάλα χρηματικά ποσά ή ακόμη και να κλείσουν.

Η εφαρμογή και ο προγραμματισμός backups στο SQL Server δεν είναι καμία πολύ δύσκολη εργασία και είναι αδιανόητο να μην έχετε backups.

Το είδος backup που θα έχετε και το κάθε πότε θα διενεργείτε μια διαδικασία backup υπαγορεύονται από τις ανάγκες του οργανισμού οι οποίες εκφράζονται με το RTO και RPO, και ο SQL Server παρέχει πολλές επιλογές για την εκπλήρωση των απαιτήσεων αυτών, χωρίς εξαρτώμαστε από λογισμικό δημιουργίας backups τρίτων κατασκευαστών.

Η λειτουργία δημιουργίας backups στο SQL Server είναι μια εσωτερική διαδικασία και όπως για όλες οι εσωτερικές εργασίες έχει και αυτή κάποια wait types και σε αυτό το άρθρο θα ασχοληθώ με αυτά ώστε να μπορείτε να έχετε πάντα τη καλύτερη δυνατή απόδοση σε αυτά διότι όπως είπα και παραπάνω τα δεδομένα είναι πολύτιμα. Ποιος δεν θέλεις να εκτελούνται όσο το δυνατόν γρηγορότερα τα backups και ιδιαίτερα τα restores; Νομίζω κανείς.

BACKUPBUFFER

Αρκετοί είναι αυτοί που πιστεύουν ότι το συγκεκριμένο wait type αφορά τα backups/restores που γίνονται σε tape το οποίο μάλιστα δεν υποστηρίζεται εδώ και αρκετές εκδόσεις στον SQL Server, δεν είναι όμως έτσι. Εύκολα αυτό μπορεί κάποιος να το επιβεβαιώσει με το παρακάτω παράδειγμα στο οποίο είναι ενεργοποιημένο το TF3213 το οποίο επιστρέφει πληροφορίες για το backup/restore operation και το γράφει αυτές στο SQL Server error log με το TF3605.

-- enable trace flags
dbcc traceon (3213);
dbcc traceon (3605);
-- backup database
backup database [wideworldimporters]
  to  disk = N'r:\backup\wwibackup.bak';
go
-- disable trace flags
dbcc traceoff (3213);
dbcc traceoff (3605);

Αν ανατρέξετε στο error log μετά από την παραπάνω εκτέλεση του disk backup, έχουν καταγραφεί οι εξής πληροφορίες, όπως φαίνονται στην εικόνα που ακολουθεί.

Σε αυτές βρίσκουμε τον αριθμό των χρησιμοποιούμενων buffers μέσω του BufferCount που έχει την τιμή 7 άρα έχω 7 backup buffers, όπου ο κάθε buffer έχει μέγεθος 1024ΚΒ το οποίο φαίνεται στο MaxTransferSize και το συνολικό μέγεθος μνήμης που χρειάζονται όλοι μαζί οι Buffers είναι στην Total buffer space, που είναι ο πολλαπλασιασμός των δύο προηγούμενα αναφερόμενων παραμέτρων και είναι 7ΜΒ.


SQL Server error log
image

Σε όλα τα παραπάνω όμως υπάρχει ακόμα μια αρκετά σημαντική πληροφορία και είναι το Memory Limit το οποίο δείχνει το μέγιστο μέγεθος της μνήμης που είναι εκτός της buffer cache και την οποία μπορεί να χρησιμοποιήσει ένα backup/restore operation.

Όπα τι είναι αυτό τώρα; Δηλαδή για την διεξαγωγή backup/restore χρειάζομαι μνήμη η οποία δεν ορίζεται στην buffer cache;

Ακριβώς, η μνήμη αυτή καταλαμβάνει μνήμη από το σύστημα αλλά δεν την "κλέβει" από την buffer cache .

Θεωρώ ότι το επόμενο εύλογο ερώτημα που έχετε είναι τι είναι και τι σκοπό εξυπηρετούν αυτοί οι buffers.

Ο SQL Server όπως είδατε χρησιμοποιεί buffers κατά την εκτέλεση των backup/restore διαδικασιών τα οποία γεμίζουν με δεδομένα από την database και γράφουν αυτά τα δεδομένα με την σειρά στο backup file. Ο αριθμός και το μέγεθος των buffers αυτών υπολογίζονται αυτόματα από τον SQL Server, αλλά μπορείτε να τις διαμορφώσετε με τις παραμέτρους BUFFERCOUNT, MAXTRANSFERSIZE για τις οποίες μπορείτε να διαβάσετε περισσότερα στο BACKUP statement.


Backup/Restore internal operation
image

To BACKUPBUFFER συμβαίνει ότι ένα backup thread περιμένει για να γεμίσει ένα backup buffer γιατί δεν υπάρχει άδειος/ελεύθερος buffer που με την σειρά του θα γραφτεί στο backup file. Αφορά δηλαδή το αριστερό τμήμα της παραπάνω εικόνας.

Για την μείωση του συγκεκριμένου wait type η συνηθέστερη πρόταση που κυκλοφορεί στο internet προτείνει την αύξηση των buffers με την χρήση της BUFFERCOUNT στο statement. Δεν είμαι αντίθετος σε αυτό απλά να επισημάνω ότι αν το κάνετε απερίσκεπτα και βάλετε μεγάλο αριθμό πιθανότητα να έχετε out of memory συμβάν και δεν είναι ότι καλύτερο σε παραγωγικό περιβάλλον. Όπως όλα τα πράγματα στο SQL Server θέλει tuning μέχρι να βρεθεί αυτό που και καλύτερους χρόνους δίνει και λιγότερα BACKUPBUFFER έχετε και δεν γίνεται out of memory.

BACKUPIO

Αφού έχετε καταλάβει το προηγούμενο BACKUPBUFFER το BACKUPIO είναι πλέον εύκολο να γίνει κατανοητό καθώς αφορά το δεξί τμήμα της παραπάνω εικόνας καθώς συμβαίνει όταν υπάρχει καθυστέρηση στο γράψιμο του buffer στο backup file. Αυτό μπορεί να συμβεί διότι γράφουμε σε αρκετά αργό δίσκο ή σε δίσκο που χρησιμοποιείται αρκετά (κοινό λάθος όλων να παίρνουν backups στο ίδιο δίσκο που έχουν και τις databases) ή σε network storage (όπου μπαίνει ο παράγοντας ταχύτητα network). Συνήθως με αυτό το wait type έχουμε και ακόμα ένα να εμφανίζεται και αυτό είναι το ASYNC_IO_COMPLETION.

Η σωστή λύση για την μείωση του BACKUPIO είναι να πάμε σε κάτι γρηγορότερο όσον αφορά το δίσκο που βάζουμε τα backup files.

BACKUPTHREAD

Το wait type αυτό θα το δείτε κυρίως σε restore operations. Δεν είναι από αυτά που φέρνουν πονοκέφαλο, εκτός και αν δούμε μεγαλύτερους χρόνους από τους αναμενόμενους, καθώς συμβαίνει όταν ένα άλλο thread περιμένει ένα backup/restore operation να ολοκληρωθεί.

Για την μείωση αυτού η καλύτερη λύση είναι μειωθεί ο χρόνος που διαρκεί ένα restore operation.

Επίλογος

Αυτά είναι τα wait types που αφορούν τα backup/restore operations


//Antonios Chatzipavlis


Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.


Relative Articles

Leave your comment

COMMENT

FULL NAME

EMAIL ADDRESS

We use Gravatar

WEB SITE



captcha


 

Newsletter

If you want to receive updates from us subscribe below with your email.
Follow us in
PASS chapter logo

The Official PASS Local Group for Greece

About us Contact us Terms of Use Privacy Sing in Register
sql school greece logo
© 2010-2020 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.