같은 서버에 두 개의 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 년-530ms
- 2016 년-600ms
따라서 2016 년은 약 11 % 느립니다.
- 그런 다음 단일 삽입 지속 시간을 마이크로 초 단위로보기 위해 결과가 테이블에 저장된 SQL 프로파일 러 추적을 작성했습니다.
결과 2
단일 삽입 기간 2012 년과 2016 년 의 히스토그램 :
sys.dm_io_virtual_file_stats에서의 트랜잭션 로그 증가는 다음과 같습니다.
- 2012-5174784 바이트
- 2016-5171200 바이트
이 테스트 중에 두 인스턴스가 시작됩니다. 그러나 매번 한 인스턴스에서만 하나의 테스트가 실행됩니다. 인스턴스 당 8Gb RAM을 할당했습니다. 쿼리 계획은 동일합니다. 각 인스턴스를 자체 상자에서 실행하는 것이 흥미로울 것입니다. 그러나 여기에는 하드웨어와 환경에 숨겨진 숨겨진 차이점이 없기 때문에 한 대의 컴퓨터가 더 좋습니다.
질문
- 2016 년이 왜 더 느린가요?
- 누군가이 테스트를 재현 할 수 있습니까?