У мене є два екземпляри SQL Server на одному сервері:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Стандартне видання (64-розрядне)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64-розрядна)
Результати sp_configure однакові для обох примірників (крім нових варіантів 2016).
Я створив нові бази даних для обох примірників в одній папці диска. Параметри автоматичного зростання однакові.
Параметри автоматичного створення та автоматичного оновлення статистики вимкнено.
Тоді я зробив тест із 10000 вставками в купу:
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
Результат 1
Середній час тесту
- 2012 р. - 530 мс
- 2016 - 600 мс
Так, 2016 рік приблизно на 11% повільніше.
- Потім я зробив трасування SQL Profiler з результатами, збереженими в таблиці, щоб побачити тривалість однієї вставки в мікросекундах.
Результат 2
Гістограма тривалості однієї вставки 2012 по 2016 рік:
Зростання журналів транзакцій від sys.dm_io_virtual_file_stats становить:
- 2012 р. - 5174784 байт
- 2016 рік - 5171200 байт
Під час цих тестів запускаються обидва екземпляри. Але один тест виконується лише в одному екземплярі кожен раз. Я виділив 8 Гб оперативної пам’яті на примірник. Плани запитів однакові. Було б цікаво запустити кожен екземпляр у своєму вікні. Але, напевно, одна машина краще, тому що тут у нас немає апаратних та оточуючих прихованих відмінностей.
Запитання
- Чому 2016 повільніше?
- Може хтось відтворить цей тест?