데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 2019에서 향상된  Rowstore batch mode

 

·         Version : SQL Server 2019

 

SQL Server 2019 Preview에서 소개된 내용으로 쿼리 처리 개선 사항으로 Intelligent Query Processing(QP) 기능중 Batch mode on Rowstore (Rowstore일괄처리 모드) 대해서 소개한다 기능은 쿼리처리에 사용할  있는 컬럼스토어 인덱스가 없는 경우 일괄처리 모드 실행의 이점을 제공한다.

 

일괄처리 모드는 주로 여러 행을 검색하고  전체에서 중요한 집계정렬  그룹화 작업을 수행하는 분석 쿼리를 대상으로 한다지금까지는 컬럼스토어 인덱스와 관련된 쿼리에는 배치모드가 예약되었다 단위가 아니라 한번에 ~900행의 배치를 사용하여 스캔  계산을 수행하면 분석 유형의 쿼리에서 훨씬 효율적이다일괄 처리 모드를 사용하면 동일한 데이터에서 동일한 쿼리를 여러번 호출하는  모드보다 빠르게 쿼리를 실행   있다.

아래 예제는 행모드와 배치모드를 설명하기 위해 WideWorldImportersDW 데이터베이스를 사용한다.

SELECT

        [Lineage Key],

        SUM([Quantity]) AS SUM_QTY,

        SUM([Unit Price]) AS SUM_BASE_PRICE,

        SUM([Unit Price]*(1+[Tax Rate])) AS SUM_DISC_PRICE,

        SUM(([Unit Price]+[Total Including Tax] )*(1+[Tax Rate])) AS SUM_CHARGE,

        AVG([Quantity]) AS AVG_QTY,

        AVG([Unit Price]) AS AVG_PRICE,

        COUNT(*) AS COUNT_ORDER

FROM Fact.[Sale]

WHERE [Invoice Date Key] >= DATEADD(dd, -73, '1998-12-01')

GROUP BY  [Lineage Key]

ORDER BY [Lineage Key];

 

먼저  모드로 실행한 결과이다실행 계획에서 아무거나 선택하여 속성을 확인해보면 행모드 인것을 확인할  있다.

 


연산자의 속성을 확인하기 위해서 클러스터된 인덱스 스캔 노드 (가장 오른쪽에 위치한 연산자) 마우스 오른쪽 버튼으로 클릭한다.

 


실제 실행 모드는 “Row”이고 저장소는 “RowStore”이다쿼리 수행시간은 테스트 컴퓨터에서  10 정도 실행되었다.

 

아래 실행 결과는 배치모드의 실행 계획이다쿼리를 호환성 수준을 150으로 변경하여 배치 모드  저장소를 활성화 한다일괄 처리 모드 처리는 스캔 작업의 일부로 집계를 수행하고 병렬처리를 다르게 처리하므로 쿼리 계획에 약간의 차이가 있음을알  있다.

 

클러스터된 인덱스 스캔의 속성을 살펴 보면 예상대로 Storage “RowStore” 이지만 실제 실행 모드가 “Batch”임을   있다그리고 쿼리실행 시간은 1/3 이하로 줄었다.

 


배치 모드는 다양한 케이스에서 성능 이점이 많지만  컬럼스토 인덱스 테이블에는 적합하지 않다.  배치 모드는 모든 분석 쿼리를 크게 향상 시킬  있자만  행만 대상으로 하거나 중요한 집계를 수행하지 않는 쿼리는  이익을 얻지 못한다.

 하드웨어데이터에 따라 다르겟지만 일괄 처리 디자인은 많은 수의 행에 대해 집계가 필요한 쿼리의 경우 쿼리 속도와 효율성면에서 많은 이득을 얻을  있다.

 

2018-10-03 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, MSSQL, SQL 2019, Rowstore, Batch mode, Batch Mode on Rowstore, Intelligent Query Processing



출처: https://sqlmvp.tistory.com/1271?category=618825 [Database Lab]
No. Subject Author Date Views
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 528
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 766
» SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 420
2147 SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 439
2146 In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 390
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 394
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 419
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 309
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 410
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 293
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 349
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 351
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 437
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 450
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 351
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 424
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 231
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 440
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 258
2131 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 398





XE Login