Eu tenho uma instalação de aproximadamente 10 dias do WinServer2012R2 e do SQL Server Express 2016 para teste. Eu sou o único usuário nesta máquina. Um banco de dados com um arquivo .bak do SQL Server 2005 de aproximadamente 250 MB é restaurado sem problemas. Após uma reinicialização da máquina, o processo "SQL Server NT - 64 bits" usa 0% da CPU.
Depois de alguns minutos ou horas e algumas consultas simples (sem atualizações/inserções!) do uso da CPU do SSMS de "SQL Server NT - 64 bits" de repente salta para ~ 15% e permanece lá, mesmo quando ocioso. A partir desse ponto, as consultas que geralmente levam menos de um segundo, de repente, levam 2 minutos. Durante uma consulta real, o uso da CPU NÃO aumenta. O servidor torna-se virtualmente inutilizável neste estado.
Somente a conexão do SQL Server Profiler leva > 30 segundos. Ao lado de minhas próprias consultas, vejo apenas algumas consultas de SQLServerCEIP / SQLTELEMETRY, ~3 por minuto.
Reiniciar o SQL-Server não resolve. O uso da CPU salta de volta para ~ 15%. Mesmo após o expediente, o SQL-Server não se recupera. Apenas reiniciar a máquina inteira resolve o problema.
Como esta é uma instalação "pronta para uso", há apenas um pequeno banco de dados, praticamente sem consultas, apenas eu como usuário e provavelmente sem bloqueios, os muitos artigos sobre problemas regulares de desempenho do SQL-Server falam sobre muitas coisas que não realmente não se aplica aqui. Parece que o SQL-Server deseja se concentrar exclusivamente em alguma tarefa interna.
Esta é uma máquina virtual com 2 GB de RAM e Xeon duplo a 2 GHz. Eu também tenho VS2016 nele e é muito rápido. Sem antivírus, nem mesmo o Windows Defender. Já tarde aqui. Vou tentar o sp_whoisactive amanhã. Eu realmente me pergunto O QUE o SQL-Server ESTÁ fazendo lá... Na máquina anterior com 1 GB, o mesmo banco de dados funcionou no SQLServer2005 por 10 anos sem problemas...
Não sou um especialista em SQL-Profiler. Por onde devo começar a procurar?
Como a utilização da CPU é baixa (e você tem um ótimo conjunto de CPU), verifique primeiro a pressão da memória. Com o SQL Express 2016 você está limitado a 1410 MB de memória, mas sua VM tem apenas 2GB. Dê à sua VM 1 GB a mais de memória e veja se isso ajuda. Você também pode verificar o log do SQL Server se ele está paginando a memória para o arquivo.
Se isso não funcionar, tente definir a configuração do banco de dados LEGACY_CARDINALITY_ESTIMATION como ON. Referência: usando o nível de compatibilidade 130 do banco de dados com CE antigo no SQL Server 2016 . Nós nos deparamos com isso com algumas de nossas atualizações; os resultados variam de acordo com cada banco de dados.
O patch a seguir descreve um problema semelhante. Pode valer a pena tentar:
https://support.microsoft.com/en-us/help/3195888/fix-high-cpu-usage-causes-performance-issues-in-sql-server-2016