Por que as estatísticas de atualização de verificação completa usam 100% da CPU no SQL Server 2014 quando usam talvez 20% da CPU no SQL Server 2008 R2, para as mesmas tabelas, com capacidade de hardware semelhante?
Eu estive olhando MAXDOP
, outras opções, e realmente não vejo nada que se destaque. Percebo que pode haver configurações que possam causar isso, mas as configurações são muito semelhantes para os dois bancos de dados (por exemplo, MAXDOP
é 4 para ambos, com os dois tendo vários núcleos). Ambos são Enterprise Edition.
Existe algo "diferente" no SQL Server 2014 versus o SQL Server 2008 R2 que possa explicar isso? Eu tenho a opção de memória em 90% para os dois servidores. Alguma idéia sobre o que procurar?
Executo estatísticas de atualização com verificação completa (100%) uma vez por semana em dois servidores usando o SQL Server 2008 R2 / SP3 e o SQL Server 2014 / SP2, e os bancos de dados têm a mesma estrutura. No servidor 2008 R2, as estatísticas de atualização de duas tabelas muito grandes levam várias horas, o que eu espero, mas a CPU permanece com menos de 20% de utilização o tempo todo. No servidor de 2014, no entanto, a CPU chega a 100% por cerca de 40 minutos. As tabelas são um pouco menores no servidor de 2014. Eu vejo isso usando os menus de análise do SQL Monitor.
Aqui está a saída do arquivo de log Ola no SQL Server 2014, a CPU vai para 100% de cerca de 2:10 para 2:45:
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
Aqui está a saída do arquivo de log Ola no SQL Server 2008 R2 para as duas estatísticas acima, mas a CPU chega a talvez 15%:
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
Não posso executá-los com o servidor maxdop = 1, pois isso elimina toda a geração de plano paralelo e isso pode prejudicar o aplicativo. Eu pretendo ir na direção oposta e aumentá-lo para 8 (existem 16 núcleos na caixa) e ver o que acontece. Pode ser mais rápido para reduzir o tempo em que a CPU está vinculada. Este trabalho é executado enquanto os usuários estão ausentes.
fonte
tempdb
configuração é a mesma? Ele pode ser usado enquantoUPDATE STATISTICS
estiver em execução, o que também pode ser um problema.Respostas:
As atualizações de estatísticas podem ficar paralelas com base em várias opções diferentes no SQL Server:
Nas versões posteriores do SQL Server (2016 e mais recentes), isso fica ainda mais complicado:
Como você notou, o seu 2008R2 será de rosca única, enquanto o de 2014 será de rosca múltipla (terminando mais rápido, mas aumentando a CPU durante a execução).
Para encontrar o equilíbrio certo para seus trabalhos de estatísticas, pense em:
fonte
Resposta do wiki da comunidade :
Melhor palpite: O plano escolhido para atualizar as estatísticas é paralelo ou mais paralelo na caixa 2014 do que na caixa 2008 R2.
As estatísticas de atualização paralela estão em vigor
fullscan
desde 2005 e, para estatísticas de amostra a partir de 2016, consulte Adições do Otimizador de Consulta no SQL Server 2016 por Gjorgji Gjeorgjievski no Blog do Mecanismo de Banco de Dados do SQL Server.Se você possui o Enterprise Edition, pode usar o Resource Governor para limitar a CPU que está sendo usada pelo seu trabalho de manutenção.
Considere também votar na sugestão de conexão Adicionar
MAXDOP
parâmetro às estatísticas de atualização por Javier Villegas.Perguntas e respostas relacionadas: Atualização de estatísticas paralelas
fonte