클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭

 

·         Version : SQL Server

 

Clustered Columnstore Index(CCI)에서 데이터를 로드 하는 일반적인 시나리오는 오버헤드가 적은 시간 (일반적으로 야간 시간) 활용해서 수백만개의 행이 포함된 데이터 파일을 로드하는 것이다권장 되는 배치 사이즈는 batchsize >= 102400으로 데이터를 로드 하는것이다배치 사이즈에 대한 내용은 아래 링크를 참고 한다.

·         컬럼스토어 인덱스 대용량 데이터 로드 : http://sqlmvp.kr/220135847446

 

CCI 동시 데이터 스트림을 동일한 델타  그룹으로 허용한다그러나 동시성을 높이면  많은 페이지 래치 경합이 발생한다 델타 RG 내부적으로 클러스터된 b-tree 인덱스로 구성되며 데이터로드는 단순하게 증가하는 클러스터된 인덱스  패턴을 따라 마지막 페이지에서 래치 경합이 발생한다.

·         컬럼스토어 인덱스 INSERT 작업과 동시성 : http://sqlmvp.kr/220132145097

·         컬럼스토어 인덱스 동시성 : http://sqlmvp.kr/220130069090

 

아래 스크립트는 CCI 삽입된 숨겨진  값을 테스트하는 간단한 방법이다.

create table foo (c1 int)

create clustered columnstore index foocci on foo

go

 

insert into foo values (1)

insert into foo values (2)

 

-- check the hidden clustering key index

select %%physloc%% , * from foo

 

 

 값은 <rowgroup-id>, <tuple-id> 나타내는 클리스터된 컬럼스토어 인덱스 행의 숨겨진  열을 나타낸다. <tuple-id> 내부적으로 단순하게 증가하는 숫자로 생성되어 동시 삽입시 페이지 래치 경합을 초래한다.

 

이러한 경합 문제를 해결하기 위한 트릭으로Memory optimized 테이블을 사용할  있다 Memory optimized 테이블을 사용하면PAGE 구조 없이 메모리에 데이터를 유지하도록 구현되므로 마지막 페이지 경합이 제거된다.

 

 트릭을 사용하여 Memory optimized 테이블은102400 행보다  청크로 마이그레이션 하여  델타행 그룹을 사용하지 않을  있다.

 

 

[참고자료]

https://blogs.msdn.microsoft.com/sql_server_team/clustered-columnstore-index-massively-parallel-trickle-insert/

 

 

2018-06-11 / Sungwook Kang / http://sqlmvp.kr / http://sqlangeles.com

 

SQL Server, MS SQL, Columnstore Index, 컬럼스토어 인덱스인덱스 경합래치 경합, page latch contention, 대용량 데이터 로드, bulk data insert



출처: https://sqlmvp.tistory.com/1251?category=618825 [Database Lab]
No. Subject Author Date Views
Notice [IT재직자] 개강임박!! 올해 마지막 무료 및 국비지원 교육 (JAVA, 리눅스 기초/고급 , CCNA, CCIE 등) 코난(김대우) 2022.12.02 87
Notice 2022년 11월 SQLER의 강좌 업데이트 리스트 코난(김대우) 2022.12.01 23
Notice 2022 공개SW 페스티벌 - Open Up 코난(김대우) 2022.12.01 15
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 359
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 549
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 322
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 384
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 393
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 500
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 511
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 397
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 506
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 260
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 500
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 288
» 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 438
2130 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 421
2129 SQL Server 2016 향상된 복제 기능 – 배포 데이터베이스 클린업 향상 jevida(강성욱) 2019.03.25 319
2128 SQL Server 2017향상된 복제 기능 – 배포 데이터베이스의 AG 지원 jevida(강성욱) 2019.03.25 479
2127 SQL Server 2017 향상된 복제 기능 - 복제에이전트 프로필 매개변수의 동적 새로 고침 jevida(강성욱) 2019.03.25 521
2126 SQL Server update on Docker jevida(강성욱) 2019.03.25 413
2125 SQL Server 2017에서 향상된 UDF 실행 계획 jevida(강성욱) 2019.03.25 384
2124 ETL data error with MariaDB ODBC 3.0 (from Aurora to MS SQL) jevida(강성욱) 2019.03.25 539





XE Login

테스트 팝업
Close