KB4040276 - OPRAVA: Nepřímé kontrolní body v databázi tempdb způsobují v SQL Server 2016 a 2017 chybu "Non-yielding scheduler"

Platí pro
SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2017 on Windows (all editions)

Příznaky

Ve výchozím nastavení jsou nepřímé kontrolní body pro databázi tempdb v systému Microsoft SQL Server 2016 a 2017 zapnuté. V podmínkách velkého pracovního zatížení může dojít k chybě "Nepoddajný plánovač" a sys.dm_os_spinlock_stats DMV ukazuje zvýšenou kolizi spinlocku pro typ DP_LIST spinlock.

Řešení

Tato oprava je součástí následujících aktualizací a aktualizace Service Pack:

Informace o aktualizacích Service Pack pro SQL Server 2016

Service Pack 2 pro SQL Server 2016

O buildech systému SQL Server

Každý nový build pro SQL Server obsahuje všechny opravy hotfix a opravy zabezpečení, které byly v předchozím buildu. Doporučujeme nainstalovat nejnovější kumulativní aktualizace pro SQL Server:

Nejnovější kumulativní aktualizace pro SQL Server 2017

Nejnovější build pro SQL Server 2016

Informace o aktualizacích Service Pack pro SQL Server:

Aktualizace Service Pack jsou kumulativní. Každá nová aktualizace Service Pack obsahuje všechny opravy z předchozích aktualizací Service Pack společně s novými opravami. Doporučujeme použít nejnovější aktualizaci Service Pack a nejnovější kumulativní aktualizaci pro tuto aktualizaci Service Pack. Před instalací nejnovější aktualizace Service Pack není nutné instalovat předchozí aktualizaci Service Pack. Další informace o nejnovější aktualizaci Service Pack a nejnovější kumulativní aktualizaci najdete v tabulce 1 v následujícím článku.

Jak zjistit verzi, edici a úroveň aktualizace systému SQL Server a jeho součástí

Alternativní řešení

Chcete-li tento problém obejít, vypněte nepřímé kontrolní body v databázi tempdb pomocí jednoho z následujících příkazů jazyka DDL (Data Definition Language).

To by mělo být provedeno následovně:

  • V databázi modeldb (tím se také změní výchozí hodnota pro nové databáze) spusťte následující příkaz:

    ALTER DATABASE [model] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Nebo přímo v databázi tempdb při každém spuštění instance použitím agenta SQL Serveru pomocí následujícího příkazu:

    ALTER DATABASE [tempdb] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Nebo pravidelně zadávejte ruční kontrolní body pro databázi tempdb pomocí následujícího příkazu:

    use tempdb
    go checkpoint
    go
     
    Kromě toho lze TF 3468 použít k zakázání nepřímého kontrolního bodu na databázi tempdb.

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Reference

Podívejte se na informace o terminologii, kterou společnost Microsoft používá k popisování aktualizací softwaru. Další informace najdete v následujících článcích: