테이블 형식 모델의 파티션
적용 대상: SQL Server Analysis Services Azure Analysis Services 패브릭/Power BI Premium
파티션은 덜 자주 처리할 수 있는 데이터에서 자주 처리(새로 고침)해야 하는 데이터 부분을 나눕니다. 예를 들어 팩트 테이블에는 거의 변경되지 않는 데이터가 포함된 특정 행 집합이 포함될 수 있지만 다른 행 집합에는 자주 변경되는 데이터가 있습니다. 일부만 처리해야 하는 경우 모든 데이터를 처리할 필요가 없습니다.
파티션은 테이블을 논리적 파티션 개체로 나누어 작동합니다. 각각 고유한 데이터 세그먼트를 포함하는 개별 파티션은 다른 파티션과 독립적으로 순차 처리 또는 병렬 처리를 점진적으로 수행하거나 처리 작업에서 모두 제외될 수 있습니다.
세분성
기본적으로 모델의 각 테이블에는 단일 파티션이 있습니다. 팩트 테이블과 같은 대부분의 경우 테이블의 단일 파티션을 여러 파티션으로 분할하면 처리에 사용 가능한 리소스를 더 잘 활용할 수 있습니다.
효과적인 모델 디자인 및 처리 전략은 파티션을 활용하여 불필요한 프로세서 로드 및 메모리 소비를 제거하는 동시에 데이터가 데이터 원본의 최신 데이터를 반영할 만큼 자주 새로 고쳐지도록 합니다. 예를 들어 테이블 형식 모델에는 현재 회계 연도 및 각 이전 회계 연도의 판매 데이터가 포함된 Sales 테이블이 있을 수 있습니다. 모델의 Sales 테이블에는 다음과 같은 파티션이 있습니다.
파티션 | 데이터 출처 |
---|---|
Sales2020 | 현재 회계 연도 |
Sales2019-2010 | 회계 연도 2010, 2011, 2012, 2013, 2014, 2015. 2016, 2017, 2018, 2019 |
SalesOld | 지난 10년 이전의 모든 회계 연도. |
현재 2020 회계 연도에 대한 새 판매 데이터가 추가되면 해당 데이터는 현재 회계 연도 판매 데이터 분석에 정확하게 반영되도록 매일 처리되어야 하므로 Sales2020 파티션은 매일 밤 처리됩니다.
야간에 Sales2019-2010 파티션에서 데이터를 처리할 필요가 없습니다. 그러나 이전 10년 동안의 판매 데이터는 제품 반품 및 기타 조정으로 인해 계속 변경될 수 있으므로 정기적으로 처리되어야 하므로 Sales2019-2010 파티션의 데이터는 매월 처리됩니다. SalesOld 파티션의 데이터는 거의 변경되지 않으므로 매년만 처리됩니다.
2021 회계 연도를 입력하면 새 Sales2021 파티션이 모델의 Sales 테이블에 추가됩니다. 그런 다음 Sales2020 파티션을 Sales2019-2010 파티션과 병합하고 Sales2020-2011로 이름을 바꿀 수 있습니다. 2010 회계 연도의 데이터는 Sales2020-2011 파티션에서 제거되고 SalesOld 파티션으로 이동됩니다. 그런 다음 모든 파티션이 변경 내용을 반영하도록 처리됩니다. 이를 일반적으로 롤링 창 패턴이라고 합니다. 각 파티션의 데이터는 미리 정의된 날짜 범위 내에 있으며 필요에 따라 증가하여 메모리 및 처리 리소스 사용을 시간이 지남에 따라 예측 가능한 범위 내에서 유지합니다.
세분성은 허용되는 시간 내에 증분 처리해야 하는 데이터의 양을 포함하여 다양한 요인의 영향을 받습니다. 예를 들어 마지막 하루 종일만 매일 처리해야 하는 경우 매일 세분성을 사용하는 것이 도움이 될 수 있습니다. 혼합 세분성은 기록, 정적 파티션이 더 높은 세분성과 결합된 낮은 조직에서 거의 실시간 새로 고침과 같은 시나리오에 대해 구성할 수 있습니다. 이로 인해 파티션 수가 줄어들지만 파티션 범위가 올바르게 정의되도록 관리 오버헤드가 증가합니다.
분할은 둘 이상의 데이터 원본의 데이터를 포함하는 테이블에도 효과적입니다. 다른 데이터 원본은 서로 다른 시간에 데이터를 업데이트할 수 있으므로 모델의 테이블 데이터에 대한 다양한 세분성 및 처리 요구 사항을 결정할 수 있습니다. 예를 들어 모델의 Orders 테이블에는 factInternetOrders 및 factRetailOrders라는 두 개의 서로 다른 팩트 테이블의 주문 트랜잭션이 포함됩니다. 데이터 원본에서 factInternetOrders는 매시간 업데이트됩니다. 반면 factRetailOrders는 모든 소매점이 문을 닫은 후 하루에 한 번만 업데이트됩니다. factInternetOrders 및 factRetailOrders에서 가져온 데이터에 대한 모델 Orders 테이블의 서로 다른 세분성에서 별도의 파티션을 만들면 Orders 테이블의 처리 작업을 데이터 원본의 주문 데이터와 더 인라인으로 분리하고 실행할 수 있습니다.
각 시나리오는 고유합니다. 데이터를 처리하지 않는 파티션과 비교하여 처리해야 하는 파티션으로 가장 효과적으로 나누는 데이터 모델에 대한 세분성을 정의해야 합니다.
파티션 제한
플랫폼에 관계없이 모델의 파티션 개체 수에는 하드 제한이 없습니다. 그러나 각 파티션에는 메모리 공간이 있는 데이터 세그먼트가 하나 이상 있습니다. 작은 파티션이 너무 많으면 작은 세그먼트가 너무 많아질 수 있습니다. 스토리지 엔진이 과도한 수의 세그먼트를 검사해야 하는 경우 쿼리 성능에 부정적인 영향을 미칠 수 있습니다. 너무 많은 파티션에 대한 메타데이터 작업 속도도 처리 리소스에 부정적인 영향을 미칠 수 있습니다.
분할 목표를 효과적으로 충족하면서 최소 파티션 수를 만듭니다. 세분성에 따라 효과적인 분할 전략을 집중하고, 사용자 쿼리가 낮은 경우에 사용 가능한 처리 및 메모리 리소스 내에서 가장 관련성이 큰 변경 데이터가 있는 파티션만 처리하는 것이 더 중요합니다.
파티션의 데이터 양에 대한 제한도 없습니다. 가능성은 낮지만 모델에는 단일 기본 파티션이 있는 단일 테이블이 있을 수 있으며 해당 테이블에는 모델의 모든 데이터가 포함될 수 있습니다. 파티션의 데이터 양은 서비스 계획 또는 하드웨어에 사용 가능한 메모리 리소스에 의해서만 제한됩니다.
파티션 만들기 및 관리
Visual Studio에서 테이블 형식 모델 디자이너를 사용하여 모델을 작성할 때 파티션 관리자를 사용하여 모델 작업 영역 데이터베이스에서 새 파티션, 편집, 병합 또는 삭제 파티션을 만듭니다. 작성 중인 모델의 호환성 수준에 따라 Partition Manager는 파티션에 포함할 데이터를 선택하는 두 가지 모드를 제공합니다. 즉, 구조화된 데이터 원본이 있는 테이블 형식 1400 이상 모델의 경우 파티션은 Power Query M 식을 사용하여 정의됩니다. 예를 들어 다음 쿼리는 2019년도 파티션을 정의합니다.
let
Source = #"SQL/sqlserver database windows net;Contoso",
dbo_Sales = Source{[Schema="dbo",Item="Sales"]}[Data],
#"Filtered Rows" = Table.SelectRows(dbo_Sales, each [OrderDateKey] >= 20190101 and [OrderDateKey] <= 20191231)
in
#"Filtered Rows"
공급자 데이터 원본의 경우 파티션은 SQL 쿼리를 사용하여 정의됩니다. 예를 들면 다음과 같습니다.
SELECT [dbo].[Sales].* FROM [dbo].[Sales]
WHERE (([OrderDateKey] >= '20190101') AND ([OrderDateKey] <= '20191231'))
Power Query M 식의 필터링된 행 인수와 SQL 문의 WHERE 절은 보다 큼(), 보다 작음(><) 및 같음(=) 연산자를 사용하여 정확히 1년을 정의합니다. 파티션을 정의할 때 각 파티션의 쿼리는 다른 파티션과 데이터 중복을 일으킬 수 없는 고유한 데이터 범위를 정의하는 것이 중요합니다.
SSMS(SQL Server Management Studio)
모델을 배포한 후 파티션은 SQL Server Management Studio(SSMS)에서 개체로 표시됩니다. SSMS의 파티션 대화 상자를 사용하거나 TMSL(테이블 형식 모델 스크립팅 언어) 스크립트를 실행하거나 TOM(테이블 형식 개체 모델)을 사용하여 프로그래밍 방식으로 배포된 모델에 대한 파티션을 만들고, 편집하고, 병합하고, 삭제합니다.
테이블 형식 모델 스크립팅 언어(TMSL)
모델의 파티션은 Partitions 개체에 정의됩니다. 다음 예제에서 Sales2019 파티션은 다음과 같이 정의됩니다.
"partition": {
"name": "Sales2019",
"mode": "import",
"source": {
"type": "m",
"expression": [
"let",
" Source = #\"SQL/sqlserver database windows net;Contoso\",",
" dbo_Sales = Source{[Schema=\"dbo\",Item=\"Sales\"]}[Data],",
" #\"Filtered Rows\" = Table.SelectRows(dbo_Sales, each [OrderDateKey] >= 20190101 and [OrderDateKey] <= 20191231)",
"in",
" #\"Filtered Rows\""
]
},
Partitions 개체에 대한 작업은 다음 TMSL 명령에서 지정할 수 있습니다.
TMSL 스크립트는 Invoke-ASCmd 명령을 실행하거나 SSIS(SQLServer Integration Services) 스크립트 작업을 통해 PowerShell을 사용하여 SQL Server Management Studio 실행할 수 있습니다.
1100 및 1103 호환성 수준의 모델의 경우 TMSL인 경우 ASSL(Analysis Services Scripting Language) 이 대신 사용됩니다.
테이블 형식 개체 모델(TOM)
테이블 형식 개체 모델에서 파티션은 Microsoft.AnalysisServices.Tabular 네임스페이스의 파티션 클래스에 의해 정의됩니다. TOM을 API로 사용하는 프로그래밍 방식 솔루션에 대한 자세한 내용은 이 문서의 뒷부분에 있는 테이블, 파티션 및 열 만들기(TOM) 및고급 분할 전략을 참조하세요.
1100 및 1103 호환성 수준의 모델의 경우 AMO(Analysis Management Objects)를 사용합니다.
파티션 처리
테이블 데이터가 분할되면 해당 파티션을 솔루션에 적합한 한 번에 처리하고 주기로 처리할 수 있습니다. 프로세스(새로 고침) 작업이 실행되면 데이터 원본 연결을 사용하여 데이터 원본에 연결합니다. Analysis Services는 각 파티션에 대해 지정된 쿼리를 사용하여 데이터 원본을 쿼리합니다. 새 데이터와 업데이트된 데이터가 모델 테이블에 로드되고 관계 및 계층 구조가 다시 작성되고 계산 열이 다시 계산됩니다.
Visual Studio에서 모델을 작성할 때 메뉴 또는 도구 모음에서 작업 영역 데이터베이스 파티션에서 프로세스 작업을 수동으로 실행할 수 있습니다. 배포된 모델의 경우 처리 작업은 SSMS의 프로세스 테이블 대화 상자를 사용하거나, TMSL(Refresh 명령)이 포함된 스크립트를 실행하거나, TOM(테이블 형식 개체 모델)을 사용하여 프로그래밍 방식으로 호출됩니다.
병렬 처리
Analysis Services는 둘 이상의 파티션에 병렬 처리를 활용하여 처리 성능을 높입니다. 병렬 처리에 대한 구성 설정은 없습니다. 병렬 처리는 테이블을 처리하거나 동일한 테이블 및 프로세스에 대해 여러 파티션을 선택할 때 기본적으로 발생합니다. 그러나 병렬 처리 작업을 제한하는 설정이 있습니다.
MaxConnections
기본적으로 각 처리 작업은 각 파티션에 대한 데이터 원본에 연결하고 쿼리합니다. 단일 데이터 원본에 대한 MaxConnections 속성으로 지정된 기본 최대 연결 수는 10개입니다. Analysis Services는 코어 수와 사용 가능한 스레드 수에 따라 실행할 동시 처리 작업의 수를 결정합니다. 이러한 스레드는 서버 instance 간에 공유됩니다. 프로세스와 같은 단일 명령은 사용 가능한 스레드를 모두 수신하지 못할 수 있습니다. 처리를 위해 시작되는 스레드는 각 병렬 처리 작업에 대해 하나씩 MaxConnections 제한 내에서 유지되도록 지연될 수 있습니다.
MaxParallelism
기본적으로 처리 작업은 가능한 한 병렬로 실행됩니다. 그러나 시퀀스 명령(TMSL)을 사용하여 maxParallism 속성 옵션을 지정하여 파티션을 순차적으로 또는 병렬로 처리하도록 선택할 수 있습니다. 값을 1로 설정하면 병렬이 아님을 의미합니다. 하나의 스레드가 처리에 사용됩니다. 값을 2 이상으로 설정하면 병렬 처리 작업에 사용할 수 있는 고정된 수의 스레드가 지정됩니다.
Monitor
프로세스 작업 중에 사용 가능한 스레드의 효과적인 사용을 확인하려면 Azure Analysis Services Azure 메트릭 Explorer 사용하여 CommandPoolIdleThreads 및 CommandPoolBusyThreads를 모니터링합니다. 자세한 내용은 서버 메트릭 모니터링을 참조하세요. SQL Server Analysis Services 경우 성능 모니터 사용하여 처리 풀 유휴 비 I/O 스레드 및 처리 풀이 사용 중인 비 I/O 스레드를 모니터링합니다. 자세한 내용은 성능 카운터(SSAS)를 참조하세요.
참고
다시 인코딩이 감지되면 병렬 처리로 인해 리소스 사용이 증가할 수 있습니다. 새 인코딩을 병렬로 사용하여 여러 파티션 작업을 중단하고 다시 시작해야 하기 때문입니다.
고급 분할 전략
Analysis Services 테이블 형식 모델에 대한 자동화된 파티션 관리 .pdf 문서와 GitHub의 AsPartitionProcessing 코드 샘플은 TOM(테이블 형식 개체 모델)을 사용하여 파티션을 만들고 관리함으로써 가상의 회사인 Advenure Works에 대한 자세한 정보와 솔루션 예제를 모두 제공합니다. 이 문서 및 프로젝트에 설명된 개념은 모든 Analysis Services 플랫폼에 적용됩니다.
추가 정보
테이블 형식 모델 파티션 만들기 및 관리
파티션 개체(TMSL)
TOM(테이블 형식 개체 모델)을 사용하여 테이블, 파티션 및 열 만들기
파티션 만들기(자습서 단원)