Príznaky
Predpokladajme, že máte nainštalovaný Microsoft SQL Server 2014, 2016 alebo 2017. Môže sa vyskytnúť jeden alebo viacero z nasledujúcich problémov:
- Inštancia SQL Server nereaguje a zobrazí sa chyba Nevýnosný plánovač. Na obnovenie bude možno potrebné reštartovať server.
- Dokončenie vrátenia transakcie môže trvať dlho. Vo väčšine prípadov reštartovanie inštancie umožní obnovenie databázy oveľa rýchlejšie ako vrátenie zmien. Upozorňujeme, že existuje mnoho dôvodov, prečo môže dokončenie vrátenia zmien trvať dlho. Podrobnosti o monitorovaní vrátenia zmien pred pokusom o reštartovanie nájdete v časti Ďalšie informácie nižšie.
- Môžete vidieť vysoké čakanie na spinlockoch, ako je napríklad SOS_OBJECT_STORE.
Riešenie
Tento problém je opravený v nasledujúcich kumulatívnych aktualizáciách pre SQL Server:
Kumulatívna aktualizácia 9 pre SQL Server 2017
Kumulatívna aktualizácia 2 pre SQL Server 2016 SP2
Informácie o kumulatívnych aktualizáciách pre SQL Server:
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Najnovšia kumulatívna aktualizácia pre SQL Server 2017
Najnovšia kumulatívna aktualizácia pre SQL Server 2016
Najnovšia kumulatívna aktualizácia pre SQL Server 2014
Informácie o balíku Service Pack pre SQL Server
Táto aktualizácia je opravená v nasledujúcom balíku Service Pack pre SQL Server:
Balík Service Pack 3 pre SQL Server 2014
Informácie o balíkoch Service Pack pre SQL Server:
Balíky Service Pack sú kumulatívne. Každý nový balík Service Pack obsahuje všetky opravy, ktoré sa nachádzajú v predchádzajúcich balíkoch Service Pack, spolu so všetkými novými opravami. Odporúčame použiť najnovší balík Service Pack a najnovšiu kumulatívnu aktualizáciu pre daný balík Service Pack. Pred inštaláciou najnovšieho balíka Service Pack nemusíte inštalovať predchádzajúci balík Service Pack. Ak chcete vyhľadať ďalšie informácie o najnovšom balíku Service Pack a najnovšej kumulatívnej aktualizácii, použite tabuľku č. 1 v nasledujúcom článku.
Ako zistiť verziu, vydanie a úroveň aktualizácie SQL Server a jeho súčastí
Existuje mnoho dôvodov, prečo vrátenie zmien môže trvať dlho, ako je napríklad dlhotrvajúca transakcia, veľký počet VLF v súbore denníka transakcie, pomalé I/O atď. Na overenie, či problém popísaný v tomto článku je hlavnou príčinou pomalého vrátenia, odporúčame na sledovanie priebehu operácie vrátenia späť použiť nasledujúce postupy:
- V sys.dm_exec_requests identifikujte session_id, ktorého príkaz je nastavený na možnosť KILLED/ROLLBACK, a uistite sa, že v relácii sa hromadí čas vstupno-výstupných operácií aj procesora, ktorý indikuje priebeh. Ak sa vstupno-výstupné operácie nemenia, môže to znamenať, že sa vyskytol problém popísaný v tomto článku.
- Dotaz sys.dm_tran_database_transactions na identifikáciu aktuálneho stavu vrátenia zmien pomocou dotazu podobného nasledujúcemu:
Poznámka
- 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)
- FROM sys.dm_tran_database_transactions t
- PRIPOJIŤ SA K sys.dm_exec_requests
ON t.transaction_id=s.transaction_id - WHERE t.database_id=db_id('<Názov databázy') a s.session_id=Session_id<vykonávajú operáciu> vrátenia späť
Poznámka:
Vo vyššie uvedenom dotaze
database_transaction_next_undo_lsn je LSN ďalšieho záznamu, ktorý treba vrátiť späť. database_transaction_begin_lsn je LSN záznamu začiatku transakcie v denníku transakcií.
database_transaction_next_undo_lsn by sa mal s každou snímkou tohto dotazu znižovať. Keď database_transaction_next_undo_lsn dosiahne database_transaction_begin_lsn, vrátenie zmien sa úspešne dokončí.
Cieľom je urobiť niekoľko snímok predchádzajúceho dotazu v rámci vopred stanoveného intervalu a potom použiť delta názvov LSN spracovaných v database_transaction_next_undo_lsn v rámci tohto intervalu a extrapolovať čas potrebný na odhad času, ktorý database_transaction_next_undo_lsn trva, kým dosiahne database_transaction_begin_lsn.
Ak vrátenie zmien prebieha medzi jednotlivými snímkami slušným tempom, navrhujeme, aby sa vrátenie späť dokončilo samostatne bez reštartovania inštancie SQL Server.
Viac informácií o dlhodobej obnove nájdete v nasledujúcich článkoch:
- Vysvetlenie výkonu obnovenia v SQL Server
- SQL Server (2000, 2005, 2008): Obnovenie/vrátenie zmien trvá dlhšie, než sa očakávalo
- Ako môže štruktúra súboru denníka ovplyvniť čas obnovenia databázy
- Sledovanie priebehu obnovy databázy pomocou informácií z DMV
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.
Odkazy
Získajte informácie o terminológii, ktorú Microsoft používa na popis aktualizácií softvéru.