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
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) (0) | 2019.03.26 |
---|---|
SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 (0) | 2019.03.26 |
SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 (0) | 2019.03.26 |
In-memory optimized table에 사용되는 Hash Index (0) | 2019.03.26 |
VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 (0) | 2019.03.25 |