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.
tempdb
configuração é a mesma? Ele pode ser usado enquantoUPDATE STATISTICS
estiver em execução, o que também pode ser um problema.