KB4040276 - CORREÇÃO: Pontos de verificação indiretos na base de dados tempdb causam o erro "Programador não produtivo" no SQL Server 2016 e 2017

Aplica-se A
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)

Sintomas

Por predefinição, os pontos de verificação indiretos estão ativados para a base de dados tempdb no Microsoft SQL Server 2016 e 2017. Em condições de carga de trabalho pesada, um erro "Agendador não produtivo" pode ocorrer e o sys.dm_os_spinlock_stats DMV mostra contenção de spinlock elevada para o tipo de spinlock DP_LIST.

Resolução

Esta correção está incluída nas seguintes atualizações e service pack:

Informações do service pack para o SQL Server 2016

Service Pack 2 para SQL Server 2016

Acerca de SQL Server compilações

Cada nova compilação para SQL Server contém todos os hotfixes e correções de segurança que estavam na compilação anterior. Recomendamos que instale as atualizações cumulativas mais recentes para SQL Server:

Atualização cumulativa mais recente para o SQL Server 2017

Compilação mais recente do SQL Server 2016

Acerca dos service packs para SQL Server:

Os service packs são cumulativos. Cada novo service pack contém todas as correções que estão em service packs anteriores, juntamente com quaisquer novas correções. Recomendamos que aplique o service pack mais recente e a atualização cumulativa mais recente para esse service pack. Não é necessário instalar um service pack anterior antes de instalar o service pack mais recente. Use a Tabela 1 no artigo a seguir para encontrar mais informações sobre o service pack mais recente e a atualização cumulativa mais recente.

Como determinar a versão, edição e nível de atualização do SQL Server e seus componentes

Solução

Para contornar este problema, desative os pontos de verificação indiretos na base de dados tempdb utilizando uma das instruções DDL (Data Definition Language) seguintes.

Isto deve ser feito da seguinte forma:

  • Na base de dados modeldb (isto também altera o valor predefinido para novas bases de dados), execute a seguinte instrução:

    ALTER DATABASE [model] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Ou, diretamente na base de dados tempdb, sempre que a instância for iniciada, utilizando o SQL Server Agent ao utilizar a seguinte instrução:

    ALTER DATABASE [tempdb] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Ou, periodicamente, emita pontos de verificação manuais na base de dados tempdb utilizando a seguinte instrução:

    use tempdb
    go checkpoint
    go
     
    Além disso, o TF 3468 pode ser usado para desativar o ponto de verificação indireto em tempdb.

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software. Consulte os seguintes artigos para obter mais informações: