У меня есть два экземпляра SQL Server на одном сервере:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standard Edition (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 медленнее?
- Может кто-нибудь воспроизвести этот тест?
источник
Ответы:
Очевидно, что совпадение наличия одинаковых версий на одном сервере очень сложно, но ... Я надеюсь, что мои результаты помогут вам. У меня есть две разные машины, настроенные как Windows Server 2012 R2 Standard. К сожалению, они не имеют одинаковое оборудование, но похожи:
Машина 1 (SQL Server 2016)
Машина 2 (SQL Server 2012)
И я запускаю 5 раз на обеих машинах один и тот же скрипт, который вы предоставили, и получил следующее среднее значение:
Каковы почти противоположные результаты, которые вы получаете. В любом случае, как вы видели, моя машина 2012 года имеет лучший процессор, но жесткий диск, который обычно показывает разницу, тот же. Таким образом, даже если в 2012 году ресурсы лучше, в моем случае это будет немного медленнее.
(Извините, пожалуйста, проверьте еще раз, моя первая версия имела несколько важных ошибок)
источник
Можете ли вы добавить
(TABLOCK)
подсказку, чтобы включить минимальное ведение журнала? Какая разница после применения этой подсказки?источник