Azure Cosmos DB에서 파티션 병합(미리 보기)

적용 대상: NoSQL MongoDB

Azure Cosmos DB에서 파티션을 병합하면(미리 보기) 컨테이너에 사용되는 실제 파티션 수를 줄일 수 있습니다. 병합을 사용하면 처리량으로 조각화된 컨테이너(파티션당 RU/s가 낮음) 또는 스토리지(파티션당 스토리지가 낮음)는 실제 파티션을 다시 작업할 수 있습니다. 컨테이너의 처리량이 스케일 업되어 다시 스케일 다운해야 하는 경우 병합을 통해 처리량 조각화 문제를 해결할 수 있습니다. 동일한 양의 프로비전된 RU/s의 경우 실제 파티션이 적다는 것은 각 실제 파티션이 전체 RU/s를 더 많이 얻는다는 것을 의미합니다. 파티션을 최소화하면 컨테이너에서 대량의 데이터가 제거되고 파티션당 RU/s가 낮을 경우 속도 제한 가능성이 줄어듭니다. 병합은 사용되지 않거나 빈 파티션을 지우고 스토리지 조각화 문제를 효과적으로 해결하는 데 도움이 될 수 있습니다.

시작하기

파티션 병합 사용을 시작하려면 Azure Cosmos DB 계정의 기능 페이지로 이동합니다. 파티션 병합(미리 보기) 기능을 선택하고 사용하도록 설정합니다.

기능을 사용하도록 설정하기 전에 Azure Cosmos DB 계정이 모든 미리 보기 자격 조건을 충족하는지 확인합니다. 이 기능을 사용하도록 설정하면 적용하는 데 15~20분이 걸립니다.

주의

계정에서 병합이 사용하도록 설정된 경우 병합 진행 여부에 관계없이 .NET SDK 버전 >= 3.27.0, Java SDK >= 4.42.0 또는 Azure Cosmos DB Spark 커넥터 >= 4.18.0의 요청만 계정에서 허용됩니다. 다른 SDK(이전 .NET SDK, 이전 Java SDK, 모든 JavaScript SDK, Python SDK, Go SDK) 또는 지원되지 않는 커넥터(Azure Data Factory, Azure Search, Azure Functionsextension <= 3.x, Azure Stream Analytics 등)의 요청은 차단되고 실패합니다. 기능을 사용하도록 설정하기 전에 지원되는 SDK 버전으로 업그레이드했는지 확인합니다. 이 기능을 사용하거나 사용하지 않도록 설정한 후 계정에 완전히 전파하는 데 15~20분이 걸릴 수 있습니다. 사용을 완료한 후 기능을 사용하지 않도록 설정하려는 경우 병합에 지원되지 않는 SDK 및 커넥터의 요청이 허용되기까지 15~20분이 걸릴 수 있습니다.

기능 창 및 파티션 병합 기능의 스크린샷.

Azure Cosmos DB 계정이 미리 보기에 적합한지 확인하려면 Azure Portal에서 기본 제공 자격 검사기를 사용하면 됩니다. Azure Portal의 Azure Cosmos DB 계정 개요 페이지에서 진단 및 문제 해결 ->처리량 및 크기 조정 ->파티션 병합으로 이동합니다. 파티션 병합 미리 보기에 대한 적합성 확인 진단을 실행합니다.

문제 진단 및 해결 페이지의 처리량 및 크기 조정 콘텐츠 스크린샷.

모든 미리 보기 자격 조건 표가 있는 병합 자격 확인 스크린샷.

병합할 컨테이너를 식별하는 방법

이 두 조건을 모두 충족하는 컨테이너는 파티션 병합의 이점을 가져올 수 있습니다.

  • 조건 1: 실제 파티션당 현재 RU/s는 <3000RU/s입니다.
  • 조건 2: 실제 파티션당 현재 평균 스토리지(GB)는 <20GB입니다.

조건 1은 이전에 RU/s(종종 데이터 수집을 위해)를 스케일 다운했으며 이제 안정적인 상태로 스케일 다운하려는 경우에 자주 발생합니다. 조건 2는 많은 양의 데이터를 삭제/TTL하여 사용하지 않는 파티션을 남길 때 자주 발생합니다.

조건 1

실제 분할당 현재 RU/s를 확인하려면 Cosmos 계정에서 메트릭으로 이동합니다. 실제 파티션 처리량 메트릭을 선택하고 데이터베이스 및 컨테이너로 필터링합니다. PhysicalPartitionId로 분할을 적용합니다.

자동 크기 조정을 사용하는 컨테이너의 경우 이 메트릭은 현재 각 실제 파티션에 프로비저닝된 최대 RU/s가 표시됩니다. 수동 처리량을 사용하는 컨테이너의 경우 이 메트릭은 각 실제 파티션에 대한 수동 RU/s가 표시됩니다.

아래 예에는 5000RU/s(500 - 5000RU/s 사이의 크기 조정)로 프로비저닝된 자동 크기 조정 컨테이너가 있습니다. 5개의 실제 파티션이 있으며 각 실제 파티션에는 1000RU/s가 있습니다.

Azure Portal의 Azure Monitor 메트릭 실제 파티션 처리량의 스크린샷.

조건 2

실제 분할당 현재 평균 스토리지를 확인하려면 먼저 컨테이너의 전체 스토리지(데이터 + 인덱스)를 찾습니다.

인사이트>스토리지>데이터 및 인덱스 사용량으로 이동합니다. 총 스토리지는 데이터와 인덱스 사용량의 합계입니다. 아래 예에서 컨테이너에는 총 74GB의 스토리지가 있습니다.

Azure Portal의 컨테이너에 대한 Azure Monitor 스토리지(데이터 + 인덱스) 메트릭의 스크린샷.

다음으로, 실제 파티션의 총 수를 찾습니다. 이 메트릭은 조건 1에서 본 PhysicalPartitionThroughput 차트에 있는 PhysicalPartitionIds의 고유 수입니다. 이 예제에는 5개의 실제 파티션이 있습니다.

마지막으로 다음을 계산합니다. 총 스토리지(GB)/실제 파티션 수. 이 예제에서는 실제 파티션당 평균(74GB/5개의 실제 파티션) = 14.8GB가 있습니다.

조건 1과 2에 따라 컨테이너는 파티션 병합의 이점을 얻을 수 있습니다.

실제 파티션 병합

PowerShell에서 -WhatIf 플래그가 전달되면 Azure Cosmos DB에서 시뮬레이션을 실행하고 예상되는 병합 결과를 반환합니다. 병합 자체가 실행되지 않았음에도 불구하고 이 결과가 반환됩니다. 플래그가 전달되지 않으면 병합이 리소스에 대해 실행됩니다. 완료되면 명령에서 병합 후 실제 파티션당 현재 스토리지 양(KB)을 출력합니다.

병합을 실행하기 전에 시스템이 효율적인 파티션 레이아웃을 계산할 수 있도록 프로비전된 RU/s(수동 RU/s 또는 자동 크기 조정 최대 RU/s)를 원하는 안정적인 상태 RU/s 사후 병합에 최대한 가깝게 설정하는 것이 좋습니다.

Install-Module를 사용하여 시험판 기능이 사용하도록 설정된 Az.CosmosDB 모듈을 설치합니다.

$parameters = @{
    Name = "Az.CosmosDB"
    AllowPrerelease = $true
    Force = $true
}
Install-Module @parameters

프로비전된 처리량 컨테이너의 경우 -WhatIf 매개 변수와 함께 Invoke-AzCosmosDBSqlContainerMerge를 사용하여 실제로 작업을 수행하지 않고 병합을 미리 봅니다.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
    WhatIf = $true
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

-WhatIf 매개 변수 없이 동일한 명령을 실행하여 병합을 시작합니다.

$parameters = @{
    ResourceGroupName = "<resource-group-name>"
    AccountName = "<cosmos-account-name>"
    DatabaseName = "<cosmos-database-name>"
    Name = "<cosmos-container-name>"
}
Invoke-AzCosmosDBSqlContainerMerge @parameters

공유 처리량 데이터베이스의 경우. az cosmosdb mongodb database merge를 사용하여 병합을 시작합니다.

az cosmosdb mongodb database merge \
	--account-name '<cosmos-account-name>'                               
	--name '<cosmos-database-name>'                                
	--resource-group '<resource-group-name>'

병합 작업 모니터링

파티션 병합은 장기 실행 작업이며, 완료하는 데 걸리는 시간에 대한 SLA가 없습니다. 시간은 컨테이너의 데이터 양과 실제 파티션 수에 따라 달라집니다. 병합이 완료될 때까지 5~6시간 이상을 허용하는 것이 좋습니다.

컨테이너에서 파티션 병합이 실행되는 동안 컨테이너 설정(TTL, 인덱싱 정책, 고유 키 등)을 변경하면 진행 중인 병합 작업이 취소됩니다. 병합이 실행되는 동안 RU/s를 늘리면 진행 중인 병합 작업이 취소되고 컨테이너의 RU/s가 새 값으로 업데이트됩니다. 요청된 RU/s에 따라 스케일 업이 즉시 수행되거나 더 오래 걸릴 수 있습니다. 병합이 실행되는 동안 RU/s를 줄이면 RU/s가 즉시 새 RU/s로 업데이트됩니다. 진행 중인 병합은 병합이 트리거될 때 설정된 RU/s에 따라 동일한 대상 파티션 수로 계속됩니다. 컨테이너 또는 처리량 설정을 변경하기 전에 병합 작업이 완료될 때까지 기다리는 것이 좋습니다.

활동 로그를 확인하고 MongoDB 컬렉션의 실제 파티션 병합 또는 SQL 컨테이너의 실제 파티션 병합 이벤트를 필터링하여 병합이 아직 진행 중인지 여부를 추적할 수 있습니다.

제한 사항

다음은 현재 병합 기능의 제한 사항입니다.

미리 보기 자격 조건

미리 보기에 등록하려면 Azure Cosmos DB 계정에서 다음 조건을 모두 충족해야 합니다.

  • Azure Cosmos DB 계정은 버전 >=3.6인 NoSQL 또는 MongoDB용 API를 사용합니다.
  • Azure Cosmos DB 계정은 프로비저닝된 처리량(수동 또는 자동 크기 조정)을 사용하고 있습니다. 병합이 서버리스 계정에 적용되지 않습니다.
  • Azure Cosmos DB 계정은 단일 쓰기 지역 계정입니다(현재 병합은 다중 지역 쓰기 계정에 지원되지 않음).
  • Azure Cosmos DB 계정에서는 다음 기능을 사용하지 않습니다.
  • NoSQL용 API를 사용하는 경우 애플리케이션에서 Azure Cosmos DB .NET v3 SDK(버전 3.27.0 이상) 또는 Java v4 SDK(버전 4.42.0 이상)를 사용해야 합니다. 계정에서 병합 미리 보기를 사용하도록 설정하면 해당 계정은 .NET/Java SDK가 아닌 버전이나 이전 .NET/Java SDK 버전에서 보낸 요청을 수락하지 않습니다.
    • API for MongoDB에서 기능을 사용하기 위한 SDK 또는 드라이버 요구 사항은 없습니다.
  • Azure Cosmos DB 계정에서 다음과 같은 현재 지원되지 않는 커넥터를 사용하지 않습니다.
    • Azure Data Factory
    • Azure Stream Analytics
    • Logic Apps
    • Azure Functions 확장 <= 3.x(Azure Functions 확장 4.0 이상이 지원됨)
    • Azure Search
    • Azure Cosmos DB Spark 커넥터 < 4.18.0
    • .NET v3 SDK >= v3.27.0 또는 Java v4 SDK >= 4.42.0이 아닌 Azure Cosmos DB SDK에 종속된 타사 라이브러리 또는 도구

계정 리소스 및 구성

  • 병합은 NoSQL 및 MongoDB용 API 계정에만 사용할 수 있습니다. API for MongoDB 계정의 경우 MongoDB 계정 버전은 3.6 이상이어야 합니다.
  • 병합은 단일 지역 쓰기 계정에만 사용할 수 있습니다. 다중 지역 쓰기 계정 지원을 사용할 수 없습니다.
  • 병합 기능을 사용하는 계정은 다음 기능도 사용할 수 없습니다(이러한 기능이 병합 지원 계정에 추가되면 계정은 리소스를 병합할 수 없음).
  • 컨테이너가 병합되면 시작 시간을 사용하여 변경 피드를 읽을 수 없습니다. 이 기능은 향후에 지원될 예정입니다.

SDK 요구 사항(NoSQL용 API만 해당)

병합 기능이 사용하도록 설정된 계정은 최신 버전의 .NET v3 SDK 또는 Java v4 SDK를 사용하는 경우에만 지원됩니다. 병합 실행 여부에 관계없이 계정에서 기능을 활성화한 경우 계정을 사용하여 지원되는 SDK만 사용해야 합니다. 다른 SDK 또는 이전 버전에서 보낸 요청은 수락되지 않습니다. 지원되는 SDK를 사용하는 한 병합이 진행되는 동안 애플리케이션이 계속 실행될 수 있습니다.

지원되는 SDK의 최신 버전을 찾습니다.

SDK 지원되는 버전 패키지 관리자 링크
.NET SDK v3 >= 3.27.0 https://www.nuget.org/packages/Microsoft.Azure.Cosmos
Java SDK v4 >= 4.42.0 https://mvnrepository.com/artifact/com.azure/azure-cosmos

다른 SDK는 향후 지원될 계획입니다.

미리 보기에 등록하기 전에 호환되는 SDK 버전을 사용하도록 애플리케이션이 업데이트되었는지 확인해야 합니다. 레거시 SDK를 사용하는 경우 적절한 마이그레이션 가이드를 따릅니다.

지원되지 않는 커넥터

미리 보기에 등록하면 다음 커넥터가 실패합니다.

  • Azure Data Factory ¹
  • Azure Stream Analytics ¹
  • Logic Apps ¹
  • Azure Functions 확장 <= 3.x(Azure Functions 확장 4.0 이상이 지원됨) ¹
  • Azure Search ¹
  • Azure Cosmos DB Spark 커넥터 < 4.18.0
  • .NET v3 SDK >= v3.27.0 또는 Java v4 SDK >= 4.42.0이 아닌 Azure Cosmos DB SDK에 종속된 타사 라이브러리 또는 도구

¹ 이러한 커넥터는 향후 지원될 계획입니다.

다음 단계