Symptomy
Załóżmy, że masz zainstalowany program Microsoft SQL Server 2014, 2016 lub 2017. Może wystąpić jeden lub kilka z następujących problemów:
-
Wystąpienie programu SQL Server wydaje się nie odpowiadać i wystąpi błąd "harmonogram niedający się". Aby odzyskać, może być konieczne ponowne uruchomienie serwera.
-
Ukończenie wycofywania transakcji może zająć dużo czasu. W większości przypadków ponowne uruchomienie wystąpienia powoduje, że baza danych będzie odzyskiwana znacznie szybciej niż wycofanie. Pamiętaj, że ukończenie wycofywania może potrwać bardzo długo, aby uzyskać szczegółowe informacje na temat monitorowania wycofywania zmian przed próbą ponownego uruchomienia, zobacz sekcję "więcej informacji" poniżej.
-
Możesz zobaczyć wysoki czas oczekiwania na spinlocks, taki jak SOS_OBJECT_STORE.
Rozwiązanie
Ten problem rozwiązano w następujących zbiorczych aktualizacjach programu SQL Server:
Zbiorcza aktualizacja 9 dla programu SQL Server 2017
Zbiorcza aktualizacja 2 dla programu SQL Server 2016 z dodatkiem SP2
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:
Najnowsza Zbiorcza aktualizacja dla programu SQL Server 2017
Najnowsza Zbiorcza aktualizacja dla programu SQL Server 2016
Najnowsza Zbiorcza aktualizacja dla programu SQL Server 2014
Informacje o dodatku Service Pack dla programu SQL Server
Ta aktualizacja została rozwiązana w następującym dodatku Service Pack dla programu SQL Server:
Dodatki Service Pack są kumulatywne. Każdy nowy dodatek Service Pack zawiera wszystkie poprawki zawarte w poprzednich dodatkach Service Pack oraz nowe poprawki. Nasze zalecenie polega na zastosowaniu najnowszego dodatku Service Pack oraz najnowszej aktualizacji zbiorczej dla tego dodatku Service Pack. Instalowanie poprzedniego dodatku Service Pack przed instalacją najnowszego dodatku Service Pack nie jest konieczne. Skorzystaj z tabeli 1 w poniższym artykule, aby znaleźć więcej informacji na temat najnowszego dodatku Service Pack i najnowszej aktualizacji zbiorczej.
Jak ustalić wersję, wydanie i aktualizację poziomu programu SQL Server i jego składników
Więcej informacji
Istnieje wiele powodów, dla których wykonanie wycofywania może trwać długo, na przykład długotrwałą transakcję, dużą liczbą VLFs w pliku dziennika transakcji, powolnych operacji wejścia/wyjścia itp. Aby sprawdzić, czy problem opisany w tym artykule jest głównym powodem powolnego wycofywania, zalecamy użycie poniższych technik w celu monitorowania postępu operacji wycofywania:
-
W sys.dm_exec_requestsZidentyfikuj session_id, którego polecenie jest ustawione na "zabijanie/wycofywanie", i upewnij się, że sesja jest sumą czasu we/wy oraz czas procesora wskazujący postęp. Jeśli we/wy nie zmieni się, oznacza to, że napotkasz problem opisany w tym artykule.
-
Sys.dm_tran_database_transactions zapytań w celu zidentyfikowania bieżącego stanu wycofania przy użyciu zapytania, takiego jak następujące:
Wybierz pozycję GETDATE () jako 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).
OD sys.dm_tran_database_transactions t
Dołącz sys.dm_exec_requests s NA t.transaction_id = s.transaction_id
GDZIE t.database_id = db_id ("<Nazwa bazy danych") i s.session_id =<session_id wykonywanie operacji wycofywania>
Uwaga:
W powyższej kwerendzie
database_transaction_next_undo_lsn to numer LSN następnego rekordu do cofnięcia. database_transaction_begin_lsn to numer LSN rekordu BEGIN dla transakcji w dzienniku transakcji.
database_transaction_next_undo_lsn powinna być zmniejszona z każdym zdjęciem tego zapytania. Przywracanie zakończy się pomyślnie po osiągnięciu database_transaction_next_undo_lsn database_transaction_begin_lsn.
Celem tej funkcji jest wykonanie kilku migawek poprzedniej kwerendy w ustalonym interwale, a następnie użycie różnicy LSNs przetworzonych w database_transaction_next_undo_lsn w tym interwale i ekstrapolację czasu podanego w celu oszacowania czasu, jaki zajmie database_transaction_next_undo_lsn do database_transaction_begin_lsn.
Jeśli wycofanie jest postępem po kursie powiększyć między poszczególnymi migawkami, zalecamy, aby wycofanie mogło zostać zakończone bez ponownego uruchamiania wystąpienia programu SQL Server.
Aby uzyskać więcej informacji na temat długotrwałego odzyskiwania, zobacz następujące artykuły:
-
SQL Server (2000, 2005, 2008): odzyskiwanie/wycofywanie trwające dłużej niż oczekiwano
-
Jak struktura pliku dziennika może wpływać na czas odzyskiwania bazy danych
-
Postęp śledzenia odzyskiwania bazy danych przy użyciu informacji z DMV
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".
Informacje
Informacje o terminologiiużywanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.