SQL Server 2016 및 2012 삽입 성능


14
  • 같은 서버에 두 개의 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 년이 왜 더 느린가요?
  • 누군가이 테스트를 재현 할 수 있습니까?

SQL Server 2016에서 TF 692가 변경 되었습니까? blogs.msdn.microsoft.com/sql_server_team/…
Joe Obbish

"SQL Server 2016에서 TF 692를 사용한 모든 변경"변경 사항이 없습니다.
Olga Sosonnykh

1
테스트를 다시 실행하지만 테스트 할 때 수동 인스턴스를 종료합니다. 테스트를 마치면 2012 인스턴스에서 검사 점 또는 기타 비동기 프로세스를 실행하여 2016 인스턴스에서 리소스를 제거 할 수 있습니다.
Nabil Becker

1
또한 SQL 2016 SP 2 CU 2 및 SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/… ) 과 두 인스턴스 모두 완전히 패치해야합니다.
David Browne-Microsoft

3
또한 명시 적 트랜잭션이 없으면 로그 파일을 비우는 데 걸리는 시간 만 테스트합니다.
David Browne-Microsoft

답변:


1

분명히 동일한 서버에 정확히 동일한 버전을 설치하는 것은 매우 어려운 일이지만 ... 결과가 도움이 되길 바랍니다. Windows Server 2012 R2 Standard에 두 개의 서로 다른 시스템이 구성되어 있습니다. 불행히도 그들은 같은 하드웨어는 없지만 비슷합니다.

  1. 컴퓨터 1 (SQL Server 2016)

    • 프로세서 : Intel (R) Xeon (r) CPU X5650 @ 2.67GHz
    • Microsoft SQL Server 2016 (RTM)-13.0.1601.5 (X64) 2016 년 4 월 29 일 23:23:58 저작권 (c) Windows Server 2012 R2 Standard 6.3의 Microsoft Corporation Standard Edition (64 비트) (빌드 9600 :) (하이퍼 바이저)
  2. 컴퓨터 2 (SQL Server 2012)

    • 프로세서 : Intel (R) Xeon (R) CPU E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012-11.0.5058.0 (X64) 2014 년 5 월 14 일 18:34:29 저작권 (c) Windows NT 6.3 (빌드 9600 :)의 Microsoft Corporation Standard Edition (64 비트) (하이퍼 바이저)

그리고 나는 당신이 제공 한 것과 동일한 스크립트를 두 컴퓨터에서 5 번 실행하고 다음 평균을 얻었습니다.

  • 2012 : 9961
  • 2016 년 : 8971

당신이 얻는 반대 결과는 무엇입니까? 어쨌든, 보시다시피 내 2012 컴퓨터에는 더 나은 프로세서가 있지만 일반적으로 차이점을 보여주는 하드 디스크는 동일합니다. 따라서 2012 년에 더 나은 리소스를 보유하더라도 내 경우에는 약간 느립니다.

(죄송합니다. 다시 확인하십시오. 첫 번째 버전에는 몇 가지 중요한 정오표가있었습니다.)


-2

(TABLOCK) 최소한의 로깅을 가능하게하는 힌트를 추가 할 수 있습니까 ? 이 힌트를 적용한 후의 차이점은 무엇입니까?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.