Simptomi
Pretpostavimo da imate instaliran Microsoft SQL Server 2014, 2016 ili 2017. Možda ćete naići na jedan ili više sljedećih problema:
- Instanca SQL Server ne reagira i pojavljuje se pogreška "Non-yielding Scheduler". Možda ćete morati ponovno pokrenuti poslužitelj za oporavak.
- Vraćanje transakcije može potrajati. U većini slučajeva ponovno pokretanje instance omogućit će bazi podataka oporavak mnogo brže od vraćanja na stariju verziju. Imajte na umu da postoji mnogo razloga zašto vraćanje može potrajati dugo, pogledajte odjeljak "Dodatne informacije" u nastavku za pojedinosti o praćenju povrataka prije pokušaja ponovnog pokretanja.
- Možda ćete primijetiti velika čekanja na spinlockovima kao što je SOS_OBJECT_STORE.
Rješenje
Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:
Kumulativno ažuriranje 9 za SQL Server 2017
Kumulativno ažuriranje 2 za SQL Server 2016 SP2
O kumulativnim ažuriranjima za SQL Server:
Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Najnovije kumulativno ažuriranje za SQL Server 2017
Najnovije kumulativno ažuriranje za SQL Server 2016
Najnovije kumulativno ažuriranje za SQL Server 2014
Informacije o servisnom paketu za SQL Server
Ovo je ažuriranje riješeno u sljedećem servisnom paketu za SQL Server:
Service Pack 3 za SQL Server 2014
O servisnim paketima za SQL Server:
Servisni paketi kumulativni su. Svaki novi servisni paket sadrži sve popravke iz prethodnih servisnih paketa, zajedno sa svim novim popravcima. Preporučujemo da za taj servisni paket primijenite najnoviji servisni paket i najnovije kumulativno ažuriranje. Ne morate instalirati prethodni servisni paket da biste instalirali najnoviji. U tablici 1 sljedećeg članka potražite dodatne informacije o najnovijem servisnom paketu i najnovijem kumulativnom ažuriranju.
Kako odrediti verziju, izdanje i razinu ažuriranja za SQL Server i njegove komponente
Mnogo je razloga zašto vraćanje može potrajati dugo, kao što su dugotrajna transakcija, velik broj VLF-ova u datoteci zapisnika transakcija, spori ulaz/izlaz itd. Da bismo potvrdili je li problem opisan u ovom članku glavni uzrok sporog vraćanja, predlažemo da se za praćenje tijeka postupka vraćanja koriste sljedeće tehnike:
- U sys.dm_exec_requests odredite session_id čija je naredba postavljena na "KILLED/ROLLBACK" i provjerite akumulira li sesija vrijeme za ulaz/izlaz i CPU-a koje označava napredak. Ako se IO ne mijenja, to može upućivati na to da nailazite na problem opisan u ovom članku.
- Unesite upit sys.dm_tran_database_transactions da biste utvrdili trenutačno stanje povratka pomoću upita kao što je ovaj:
Napomena
- SELECT getdate() as 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
- PRIDRUŽITE sys.dm_exec_requests
UKLJUČENO t.transaction_id=s.transaction_id - WHERE t.database_id=db_id('<Naziv baze podataka') i s.session_id=Session_id<izvođenja operacije> povratka
Napomena:
U gornjem upitu:
database_transaction_next_undo_lsn je LSN sljedećeg zapisa koji treba poništiti. database_transaction_begin_lsn je LSN početnog zapisa za transakciju u zapisniku transakcija.
database_transaction_next_undo_lsn bi se trebale smanjivati sa svakom snimkom upita. Vraćanje će se uspješno dovršiti kada database_transaction_next_undo_lsn dosegne database_transaction_begin_lsn.
Cilj je napraviti nekoliko snimaka prethodnog upita unutar unaprijed određenog intervala, a zatim koristiti deltu LSN-ova obrađenih u database_transaction_next_undo_lsn unutar tog intervala i ekstrapolirati vrijeme potrebno za procjenu vremena potrebnog database_transaction_next_undo_lsn za dosezanje database_transaction_begin_lsn.
Ako vraćanje napreduje pristojnom brzinom između svake snimke stanja, predlažemo da se povratak dovrši sam od sebe bez ponovnog pokretanja instance sustava SQL Server.
U sljedećim člancima potražite dodatne informacije o dugotrajnom oporavku:
- Objašnjenje performansi oporavka u sustavu SQL Server
- SQL Server (2000, 2005, 2008): oporavak/vraćanje traje dulje od očekivanog
- Kako struktura datoteke zapisnika utječe na vrijeme oporavka baze podataka
- Praćenje napretka oporavka baze podataka pomoću informacija iz DMV-a
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.
Reference
Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.