Συμπτώματα
Ας υποθέσουμε ότι έχετε Microsoft SQL Server 2014, 2016 ή 2017 εγκατεστημένο. Ενδέχεται να αντιμετωπίσετε ένα ή περισσότερα από τα ακόλουθα προβλήματα:
- Η SQL Server παρουσία φαίνεται να μην ανταποκρίνεται και παρουσιάζεται ένα σφάλμα "Χρονοδιάγραμμα μη απόδοσης". Ίσως χρειαστεί να επανεκκινήσετε το διακομιστή για αποκατάσταση.
- Η επαναφορά μιας συναλλαγής μπορεί να διαρκέσει πολλή ώρα. Στις περισσότερες περιπτώσεις, η επανεκκίνηση της παρουσίας θα επιτρέψει στην βάση δεδομένων να ανακάμψει πολύ πιο γρήγορα από την επαναφορά. Σημειώστε ότι υπάρχουν πολλοί λόγοι για τους οποίους μια επαναφορά μπορεί να χρειαστεί πολύ χρόνο για να ολοκληρωθεί. Ανατρέξτε στην ενότητα "Περισσότερες πληροφορίες" παρακάτω για λεπτομέρειες σχετικά με την παρακολούθηση επαναφορών πριν επιχειρήσετε επανεκκίνηση.
- Μπορεί να δείτε υψηλές αναμονές σε spinlocks όπως SOS_OBJECT_STORE.
Επίλυση
Αυτό το πρόβλημα διορθώνεται στις ακόλουθες αθροιστικές ενημερωμένες εκδόσεις για SQL Server:
Αθροιστική ενημερωμένη έκδοση 9 για SQL Server 2017
Αθροιστική ενημερωμένη έκδοση 2 για SQL Server 2016 SP2
Πληροφορίες σχετικά με τις συγκεντρωτικές ενημερώσεις για SQL Server:
Κάθε νέα αθροιστική ενημερωμένη έκδοση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη αθροιστική ενημερωμένη έκδοση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για SQL Server:
Τελευταία αθροιστική ενημέρωση για το SQL Server 2017
Τελευταία αθροιστική ενημέρωση για το SQL Server 2016
Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2014
Πληροφορίες Service Pack για SQL Server
Αυτή η ενημερωμένη έκδοση διορθώνεται στο ακόλουθο service pack για SQL Server:
Service Pack 3 για SQL Server 2014
Σχετικά με τα Service Pack για SQL Server:
Τα service pack είναι αθροιστικά. Κάθε νέο service pack περιέχει όλες τις ενημερώσεις κώδικα που βρίσκονται σε προηγούμενα service pack, μαζί με τυχόν νέες ενημερώσεις κώδικα. Η σύσταση μας είναι να εφαρμόσετε το πιο πρόσφατο service pack και την πιο πρόσφατη αθροιστική ενημέρωση για αυτό το service pack. Δεν χρειάζεται να εγκαταστήσετε ένα προηγούμενο service pack πριν να εγκαταστήσετε το πιο πρόσφατο service pack. Χρησιμοποιήστε τον Πίνακα 1 στο παρακάτω άρθρο για να βρείτε περισσότερες πληροφορίες σχετικά με το πιο πρόσφατο service pack και την πιο πρόσφατη αθροιστική ενημέρωση.
Υπάρχουν πολλοί λόγοι για τους οποίους μια επαναφορά μπορεί να διαρκέσει πολύ, όπως μια μακροχρόνια συναλλαγή, ένας μεγάλος αριθμός VLF στο αρχείο καταγραφής συναλλαγών, αργή είσοδος/έξοδος κ.λπ. Για να επαληθεύσετε ότι το πρόβλημα που περιγράφεται σε αυτό το άρθρο είναι η βασική αιτία μιας αργής επαναφοράς, προτείνουμε να χρησιμοποιηθούν οι ακόλουθες τεχνικές για την παρακολούθηση της προόδου της λειτουργίας επαναφοράς:
- Από sys.dm_exec_requests, προσδιορίστε το session_id του οποίου η εντολή έχει οριστεί σε "KILLED/ROLLBACK" και βεβαιωθείτε ότι η περίοδος λειτουργίας συσσωρεύει χρόνο IO και CPU που υποδεικνύει πρόοδο. Εάν η είσοδος/έξοδος δεν αλλάζει, αυτό μπορεί να αποτελεί ένδειξη ότι αντιμετωπίζετε το πρόβλημα που περιγράφεται σε αυτό το άρθρο.
- Το ερώτημα sys.dm_tran_database_transactions για να προσδιορίσετε την τρέχουσα κατάσταση της επαναφοράς χρησιμοποιώντας ένα ερώτημα όπως το παρακάτω:
Σημείωση
- SELECT getdate() ως CurrentTime, database_transaction_next_undo_lsn,database_transaction_begin_lsn,t.transaction_id,database_transaction_begin_time,database_transaction_log_record_count,db_name(t.database_id)
- ΑΠΟ sys.dm_tran_database_transactions t
- ΣΥΜΜΕΤΕΧΕΤΕ ΣΕ sys.dm_exec_requests
ΣΤΙΣ t.transaction_id=s.transaction_id - WHERE t.database_id=db_id('<Όνομα βάσης δεδομένων') και s.session_id=Session_id<κατά την εκτέλεση της λειτουργίας> επαναφοράς
Σημείωση:
Στο παραπάνω ερώτημα,
database_transaction_next_undo_lsn είναι το LSN της επόμενης εγγραφής προς αναίρεση. database_transaction_begin_lsn είναι το LSN της αρχικής εγγραφής για τη συναλλαγή στο αρχείο καταγραφής συναλλαγών.
database_transaction_next_undo_lsn θα πρέπει να μειώνεται με κάθε στιγμιότυπο αυτού του ερωτήματος. Η επαναφορά θα ολοκληρωθεί με επιτυχία όταν η database_transaction_next_undo_lsn φτάσει στο database_transaction_begin_lsn.
Ο στόχος εδώ είναι να τραβήξετε μερικά στιγμιότυπα του προηγούμενου ερωτήματος μέσα σε ένα προκαθορισμένο διάστημα και, στη συνέχεια, να χρησιμοποιήσετε το delta των LSN που υποβλήθηκαν σε επεξεργασία στο database_transaction_next_undo_lsn μέσα σε αυτό το διάστημα και να προεκτείνετε το χρόνο που απαιτείται για να εκτιμηθεί ο χρόνος που θα χρειαστεί για να φτάσει το database_transaction_next_undo_lsn στο database_transaction_begin_lsn.
Εάν η επαναφορά εξελίσσεται με αξιοπρεπή ρυθμό μεταξύ κάθε στιγμιότυπου, προτείνουμε να επιτραπεί η ολοκλήρωση της επαναφοράς από μόνη της χωρίς επανεκκίνηση της SQL Server παρουσίας.
Ανατρέξτε στα παρακάτω άρθρα για περισσότερες πληροφορίες σχετικά με τη μακροχρόνια αποκατάσταση:
- Κατανόηση των επιδόσεων αποκατάστασης στο SQL Server
- SQL Server (2000, 2005, 2008): Η αποκατάσταση/επαναφορά διαρκεί περισσότερο από το αναμενόμενο
- Πώς μια δομή αρχείου καταγραφής μπορεί να επηρεάσει το χρόνο ανάκτησης της βάσης δεδομένων
- Παρακολούθηση της προόδου ανάκτησης βάσης δεδομένων με χρήση πληροφοριών από DMV
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".
Παραπομπές
Ενημερωθείτε για την ορολογία που χρησιμοποιεί η Microsoft για να περιγράφει τις ενημερώσεις λογισμικού.