KB4338890 – PATAISYMAS: 2014, 2016 ir 2017 „SQL Server“ klaida "Nepasiduodanti planuoklė" ir „SQL Server“ nereaguoja

Taikoma
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)

Požymiai

Tarkime, kad turite įdiegtą "Microsoft „SQL Server“ 2014", 2016 arba 2017.  Gali kilti viena ar daugiau iš šių problemų:

  • Atrodo, kad „SQL Server“ egzempliorius nereaguoja ir įvyksta klaida "Nepasiduodanti planuoklė". Norint atkurti, gali tekti iš naujo paleisti serverį.
  • Operacijos keitimų atšaukimas gali užtrukti ilgai. Daugeliu atvejų iš naujo paleidus egzempliorių duomenų bazė bus atkurta daug greičiau nei atšaukus keitimus. Atkreipkite dėmesį, kad yra daug priežasčių, kodėl keitimų atšaukimas gali užtrukti ilgai. Daugiau informacijos žr. toliau esančiame skyriuje "Daugiau informacijos" apie keitimų atšaukimo stebėjimą prieš bandant paleisti iš naujo.
  • Suktukų, tokių kaip SOS_OBJECT_STORE, laukimas gali būti didelis.

Sprendimas

Ši problema išspręsta šiuose kaupiamuosiuose "„SQL Server“" naujinimuose:

9 kaupiamasis naujinimas, skirtas „SQL Server“ 2017

2 kaupiamasis naujinimas, skirtas „SQL Server“ 2016 SP2

Apie "„SQL Server“" kaupiamuosius naujinimus:

Kiekviename naujame „SQL Server“ kaupiamajame naujinime yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius "„SQL Server“" kaupiamuosius naujinimus:

Naujausias "„SQL Server“ 2017" kaupiamasis naujinimas

Naujausias kaupiamasis naujinimas, skirtas „SQL Server“ 2016

Naujausias "„SQL Server“ 2014" kaupiamasis naujinimas

Pakeitimų paketo informacija, skirta „SQL Server“

Šis naujinimas ištaisytas šiame "„SQL Server“" pakeitimų pakete:

3 pakeitimų paketas, skirtas „SQL Server“ 2014

Apie „SQL Server“ pakeitimų paketus:

Pakeitimų paketai yra kaupiamieji. Kiekviename naujame pakeitimų pakete yra visos ankstesniuose pakeitimų paketuose esančios pataisos ir visos naujos pataisos. Rekomenduojame taikyti naujausią pakeitimų paketą ir naujausią to pakeitimų paketo kaupiamąjį naujinimą. Prieš įdiegiant naujausią pakeitimų paketą nereikia įdiegti ankstesnio pakeitimų paketo. Norėdami rasti daugiau informacijos apie naujausią pakeitimų paketą ir naujausią kaupiamąjį naujinimą, naudokite šio straipsnio 1 lentelę.

Kaip nustatyti "„SQL Server“" ir jo komponentų versiją, leidimą ir atnaujinimo lygį

Daugiau informacijos

Yra daug priežasčių, kodėl atšaukimas gali užtrukti ilgai, pvz., ilgai trunkanti operacija, didelis VLF skaičius operacijų žurnalo faile, lėtas įėjimas / išvestis ir kt. Norėdami patikrinti, ar šiame straipsnyje aprašyta problema yra pagrindinė lėto keitimų atšaukimo priežastis, siūlome naudoti šiuos metodus, kad būtų galima stebėti keitimų atšaukimo operacijos eigą:

  • sys.dm_exec_requests nustatykite session_id, kurio komanda nustatyta kaip "KILLED/ROLLBACK", ir įsitikinkite, kad seanse kaupiamas įvesties ir procesoriaus laikas, rodantis eigą. Jei įvesties įvestis nesikeičia, tai gali būti požymis, kad susiduriate su šiame straipsnyje aprašyta problema.
  • Užklausos sys.dm_tran_database_transactions , kad būtų galima nustatyti dabartinę keitimų atšaukimo būseną naudojant tokią užklausą:

Pastaba

  • 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)
  • NUO sys.dm_tran_database_transactions t
  • PRISIJUNKITE sys.dm_exec_requests S
       ĮJUNGTA t.transaction_id=s.transaction_id
  • WHERE t.database_id=db_id('<Duomenų bazės pavadinimas') and s.session_id=<Session_id atlieka keitimų atšaukimo operaciją>

Pastaba:

Aukščiau pateiktoje užklausoje,

database_transaction_next_undo_lsn yra kito anuliuotino įrašo LSN. database_transaction_begin_lsn yra operacijos pradžios įrašo LSN operacijų žurnale.

database_transaction_next_undo_lsn turėtų mažėti su kiekviena šios užklausos momentine kopija. Keitimų atšaukimas bus sėkmingai baigtas, kai database_transaction_next_undo_lsn pasieks database_transaction_begin_lsn.

Tikslas yra padaryti keletą ankstesnės užklausos momentinių kopijų per iš anksto nustatytą intervalą, tada naudoti LSN, apdorotų database_transaction_next_undo_lsn per tą intervalą, delta ir ekstrapoliuoti laiką, kurio prireikė, kad įvertintumėte, kiek laiko užtruks database_transaction_next_undo_lsn pasiekti database_transaction_begin_lsn.

Jei keitimų atšaukimas vyksta tinkamu greičiu tarp kiekvienos momentinės kopijos, siūlome leisti atšaukti savarankiškai nepaleidžiant „SQL Server“ egzemplioriaus iš naujo.

Peržiūrėkite šiuos straipsnius, jei reikia daugiau informacijos apie ilgalaikį atkūrimą:

Būsena

„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.

Nuorodos

Sužinokite daugiau apie terminus, kuriuos „„Microsoft““ naudoja apibūdindama programinės įrangos naujinimus.