KB4338890 – OPRAVA: Chyba Nevýnosný plánovač a SQL Server v SQL Server 2014, 2016 a 2017 nereagujú

Vzťahuje sa na
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

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í

Ďalšie informácie

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:

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.