Tengo dos instancias de SQL Server en el mismo servidor:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Edición estándar (64 bits)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64 bits)
Los resultados de sp_configure son los mismos en ambas instancias (excepto las nuevas opciones de 2016).
He creado nuevas bases de datos en ambas instancias en la misma carpeta de disco. Los parámetros de crecimiento automático son los mismos.
Las opciones de estadísticas de creación automática y actualización automática están desactivadas.
Luego hice una prueba con 10000 inserciones en un montón:
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
El tiempo de prueba promedio
- 2012 - 530 ms
- 2016 - 600 ms
Entonces, 2016 es aproximadamente un 11% más lento.
- Luego hice un seguimiento de SQL Profiler con resultados guardados en la tabla para ver la duración de la inserción única en microsegundos.
Resultado 2
El histograma de una duración de inserción única 2012 vs 2016:
El crecimiento de los registros de transacciones de sys.dm_io_virtual_file_stats es:
- 2012 - 5174784 bytes
- 2016 - 5171200 bytes
Durante estas pruebas se inician ambas instancias. Pero una prueba se ejecuta solo en una instancia cada vez. He asignado 8 Gb de RAM por instancia. Los planes de consulta son los mismos. Sería interesante ejecutar cada instancia en su propio cuadro. Pero probablemente la única máquina sea mejor, porque aquí no tenemos hardware ni diferencias ocultas en el medio ambiente.
Preguntas
- ¿Por qué es 2016 más lento?
- ¿Alguien puede reproducir esta prueba?
fuente
Respuestas:
Obviamente es muy difícil la coincidencia de tener exactamente las mismas versiones en el mismo servidor pero ... espero que mis resultados te ayuden. Tengo dos máquinas diferentes configuradas tanto en Windows Server 2012 R2 Standard. Desafortunadamente no tienen el mismo hardware pero similar:
Máquina 1 (SQL Server 2016)
Máquina 2 (SQL Server 2012)
Y ejecuto 5 veces en ambas máquinas la misma secuencia de comandos que me ha proporcionado y obtuve el siguiente promedio:
¿Cuáles son los resultados casi opuestos que obtienes? De todos modos, como has visto, mi máquina 2012 tiene un mejor procesador, pero el disco duro que normalmente es el que muestra la diferencia es el mismo. Entonces, incluso si 2012 tiene mejores recursos, es un poco más lento para mi caso.
(Lo siento, por favor, verifique nuevamente, mi primera versión tuvo algunas erratas importantes)
fuente
¿Se puede agregar una
(TABLOCK)
pista para permitir un registro mínimo? ¿Cuál es la diferencia después de aplicar esta pista?fuente