SQL Server 2016 DBCC CHECK 작업 성능 향상
- Version : SQL Server 2016
대부분의 SQL Server (MULTI_OBJECT_SCANNER* base) 환경에서 DBCC CHECKS* (checkdb, checktable,…) 검사를 실행하는 동안 대기(wait)를 경험하게 된다. 내부적으로 DBCC CHECKS*를 실행하면 페이지 스캔 코디네이터 디자인(MultiObjectScanner)을 사용한다. SQL Server 2016 버전부터는 DBCC 작업시 이전보다 훨씬 더 확장 할 수 있도록 내부설계를 인모메리 최적화(Hekaton) 객체에 사용되는 것과 유사한 락(lock) 디자인을 적용하여 작업 성능을 향상 시켰다.
다음 차트는 동일한 1TB 데이터베이스의 테스트 결과를 나타낸다.
- MultiObjectScanner : SQL Server 2016 이전 버전의 디자인
- CheckScanner : SQL Server 2016 적용된 새로운 디자인
새롭게 적용된 디자인은 8코어 이상의 CPU에서 더 나은 결과를 제공한다. 하지만 8코어 이상에서는 성능이 크게 나아지지 않았다. 기존 디자인의 경우 코어가 많을수록 더 많은 실행 시간이 요구 되었다.
[데모 시나리오]
- SSMS에서 SQL Server 인스턴스에 연결 (2012 또는 2014)
- 새 쿼리창에서 데모 스크립트를 실행하고 실행 시간을 기록
- 동일한 하드웨어에서 SQL Server 2016 CTP 3.0 이상의 버전 인스턴스를 사용하여 데모 스크립트를 실행.
[시스템 사양]
Machine | 32GB RAM, 4 Core Hyper-threaded enabled 2.8Ghz, SSD Storage |
SQL Server | Out of the box, default installation |
[데모 결과 (7번 실행)]
SQL Server 2014 | 12880ms |
SQL Server 2016 | 1676ms |
[데모 스크립트]
use tempdb go set nocount on go if(0 <> (select count(*) from tempdb.sys.objects where name = 'tblDBCC') ) begin drop table tblDBCC end go create table tblDBCC ( iID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, strData nvarchar(2000) NOT NULL ) go --Insert data to expand to a table that allows DOP activities print 'Populating Data' go begin tran go insert into tblDBCC (strData) values ( replicate(N'X', 2000) ) while(SCOPE_IDENTITY() < 100000) begin insert into tblDBCC (strData) values ( replicate(N'X', 2000) ) end go commit tran go -- CheckDB declare @dtStart datetime set @dtStart = GETUTCDATE(); dbcc checkdb(tempdb) select datediff(ms, @dtStart, GetUTCDate()) as [Elapsed DBCC checkdb (ms)] go |
[참고자료]
2016-03-27 / 강성욱 / http://sqlmvp.kr
SQL Server 2016, DBCC CHECKDB, DBCC 성능 향상, DBCC Scales 7x Better, MS SQL, MULTI_OBJECT_SCANNER,
'SQL Server > SQL Server Tip' 카테고리의 다른 글
확장이벤트 사용시 주의사항 (0) | 2016.05.14 |
---|---|
Unix(Linux) timestamp(bigint) 형식을 datetime 으로 변경하기 (0) | 2016.05.05 |
Query Rule Off를 사용한 SQL Server 옵티마이저 비활성화 (0) | 2016.03.03 |
시스템 관리자 권한이 없는 특정 프로그램에서 Trace Flag 사용하기 (0) | 2016.02.01 |
In-Memory OLTP 환경에서 체크포인트 작업과 디스크 부족 경고 (0) | 2016.01.26 |