Eu tenho duas instâncias do SQL Server no mesmo servidor:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standard Edition (64 bits)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64 bits)
Os resultados sp_configure são os mesmos nas duas instâncias (exceto nas novas opções de 2016).
Criei novos bancos de dados nas duas instâncias na mesma pasta de disco. Os parâmetros de crescimento automático são os mesmos.
As opções de estatísticas de criação automática e atualização automática estão desativadas.
Então eu fiz um teste com 10000 inserções em uma pilha:
set nocount on
go
create table dbo.TestInsert ( i int not null, s varchar(50) not null )
declare @d1 datetime, @d2 datetime, @i int
set @d1 = getdate()
set @i = 1
while @i <= 10000
begin
insert into dbo.TestInsert ( i, s ) select @i, replicate( 'a', 50 )
set @i = @i + 1
end
set @d2 = getdate()
select datediff(ms, @d1, @d2)
drop table dbo.TestInsert
Resultado 1
O tempo médio de teste
- 2012 - 530 ms
- 2016 - 600 ms
Então, 2016 é cerca de 11% mais lento.
- Em seguida, fiz um rastreamento do SQL Profiler com os resultados salvos na tabela para ver a duração da inserção única em microssegundos.
Resultado 2
O histograma de uma única inserção com duração de 2012 x 2016:
O crescimento dos logs de transações de sys.dm_io_virtual_file_stats é:
- 2012 - 5174784 bytes
- 2016 - 5171200 bytes
Durante esses testes, ambas as instâncias são iniciadas. Mas um teste está sendo executado apenas em uma instância de cada vez. Eu aloquei 8 GB de RAM por instância. Os planos de consulta são os mesmos. Seria interessante executar cada instância em sua própria caixa. Mas provavelmente a única máquina é melhor, porque aqui não temos diferenças ocultas em termos de hardware e ambiente.
Questões
- Por que 2016 é mais lento?
- Alguém pode reproduzir este teste?
fonte
Respostas:
Obviamente, é muito difícil a coincidência de ter exatamente as mesmas versões no mesmo servidor, mas ... Espero que meus resultados o ajudem. Eu tenho duas máquinas diferentes configuradas no Windows Server 2012 R2 Standard. Infelizmente, eles não têm o mesmo hardware, mas semelhante:
Máquina 1 (SQL Server 2016)
Máquina 2 (SQL Server 2012)
E eu corro 5 vezes em ambas as máquinas o mesmo script que você forneceu e obteve a seguinte média:
Qual é quase os resultados opostos que você obtém. De qualquer forma, como você viu, minha máquina de 2012 tem um processador melhor, mas o disco rígido que normalmente é o que mostra a diferença é o mesmo. Portanto, mesmo que 2012 tenha melhores recursos, é um pouco mais lento para o meu caso.
(Desculpe, por favor, verifique novamente, minha primeira versão teve algumas erratas importantes)
fonte
Você pode adicionar uma
(TABLOCK)
dica para permitir o registro mínimo? Qual é a diferença depois de aplicar esta dica?fonte