Azure Cosmos DB에서 인사이트를 사용하여 모니터링 및 디버그
적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블
Azure Cosmos DB는 처리량, 스토리지, 일관성, 가용성 및 대기 시간에 대한 인사이트를 제공합니다. Azure Portal은 이러한 메트릭의 집계 보기를 제공합니다. Azure Monitor API에서 Azure Cosmos DB 메트릭을 볼 수도 있습니다. 컨테이너 이름과 같은 메트릭의 차원 값은 대/소문자를 구분하지 않습니다. 따라서 해당 차원 값의 문자열 비교를 수행할 때는 대/소문자를 구분하지 않는 비교를 사용해야 합니다. Azure Monitor에서 메트릭을 보는 방법을 알아보려면 Azure Cosmos DB 모니터링을 참조하세요.
이 문서에서는 일반적인 사용 사례와 Azure Cosmos DB 인사이트를 사용하여 이러한 문제를 분석 및 디버그할 수 있는 방법을 안내합니다. 기본적으로 메트릭 인사이트는 5분마다 수집되고 7일 동안 유지됩니다.
다음 섹션에서는 Azure Cosmos DB 메트릭을 사용할 수 있는 일반적인 시나리오에 대해 설명합니다.
참고 항목
메트릭의 데이터베이스 또는 컬렉션별로 필터링할 때 resourceName으로 "__Empty" 또는 "<비어> 있음"이 표시되었을 수 있습니다. 메트릭 데이터가 특정 요청에 대한 계정 수준에서 수집되기 때문입니다. 따라서 메트릭 값으로 연결된 데이터베이스 또는 컬렉션이 없습니다.
성공한 요청 수 또는 오류가 발생하는 요청 수 이해
시작하려면 Azure Portal에서 Insights 창으로 이동합니다. 이 창에서 요청 탭을 엽니다. 요청 탭에는 총 요청 수가 상태 코드 및 작업 유형별로 분할되어 나와 있는 차트가 표시됩니다. HTTP 상태 코드에 대한 자세한 내용은 Azure Cosmos DB에 대한 HTTP 상태 코드를 참조하세요.
가장 일반적인 오류 상태 코드는 429입니다(속도 제한/제한). 이 오류는 Azure Cosmos DB에 대한 요청이 프로비전된 처리량보다 더 많은 것을 의미합니다. 이 문제에 대한 가장 일반적인 솔루션은 지정된 컬렉션에 대한 RU를 스케일 업하는 것입니다. 자세한 내용은 Azure Cosmos DB의 프로비전된 처리량 소개를 참조하세요.
파티션 키 범위별로 처리량 사용량 확인
파티션 키의 좋은 카디널리티 사용은 확장 가능한 모든 애플리케이션에 필요합니다. 모든 분할된 컨테이너의 처리량 배포를 파티션 키 범위 ID로 분석하여 확인하려면 인사이트 창으로 이동합니다. 처리량 탭을 엽니다. 서로 다른 파티션 키 범위에서 정규화된 RU/s 사용량이 차트에 표시됩니다.
이 차트를 통해 핫 파티션이 있는지 확인할 수 있습니다. PartitionKeyRangeID는 실제 파티션에 해당합니다. 정규화된 RU 소비 메트릭은 데이터베이스 또는 컨테이너에서 프로비전된 처리량의 사용률을 측정하는 데 도움이 되는 0%에서 100% 사이의 값입니다. 불균등 처리량 배포 시 핫 파티션이 발생할 수 있고, 이로 인해 제한된 요청이 초래되고 다시 분할해야 할 수도 있습니다. 배포 불균등을 초래하는 파티션 키를 식별한 후 더 많이 배포된 파티션 키로 컨테이너를 다시 분할해야 할 수도 있습니다. Azure Cosmos DB의 분할에 대한 자세한 내용은 Azure Cosmos DB의 분할 및 수평 크기 조정을 참조하세요.
데이터 및 인덱스 사용량 확인
데이터 사용량, 인덱스 사용량 및 문서 사용량에 따라 분할된 컨테이너의 스토리지 배포를 결정하는 것이 중요합니다. 인덱스 사용량을 최소화하고, 데이터 사용량을 최대화하고, 쿼리를 최적화할 수 있습니다. 이 데이터를 가져오려면 인사이트 창으로 이동하여 스토리지 탭을 엽니다.
데이터 크기 및 인덱스 크기 비교
Azure Cosmos DB에서 사용된 총 스토리지는 데이터 크기와 인덱스 크기의 조합입니다. 일반적으로 인덱스 크기는 데이터 크기의 비율입니다. 자세한 내용은 인덱스 크기 문서를 참조하세요. Azure Portal의 메트릭 창에 있는 스토리지 탭에는 스토리지 사용량이 데이터 및 인덱스에 따라 분석되어 표시됩니다.
// Measure the document size usage (which includes the index size)
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));
Console.WriteLine("Document size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);
인덱스 공간을 절약하려는 경우 인덱싱 정책을 조정할 수 있습니다.
느린 쿼리 디버그
API for NoSQL SDK에서 Azure Cosmos DB는 쿼리 실행 통계를 제공합니다.
IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName),
"SELECT * FROM c WHERE c.city = 'Seattle'",
new FeedOptions
{
PopulateQueryMetrics = true,
MaxItemCount = -1,
MaxDegreeOfParallelism = -1,
EnableCrossPartitionQuery = true
}).AsDocumentQuery();
FeedResponse<dynamic> result = await query.ExecuteNextAsync();
// Returns metrics by partition key range Id
IReadOnlyDictionary<string, QueryMetrics> metrics = result.QueryMetrics;
QueryMetrics는 쿼리의 각 구성 요소를 실행하는 데 걸린 기간에 대한 세부 정보를 제공합니다. 장기 실행 쿼리에 대한 가장 일반적인 근본 원인은 검색이며 쿼리에서 인덱스를 적용할 수 없음을 의미합니다. 더 나은 필터 조건을 사용하여 이 문제를 해결할 수 있습니다.
컨트롤 플레인 요청 모니터링
Azure Cosmos DB는 연속 5분 간격으로 수행할 수 있는 메타데이터 요청 수에 제한을 적용합니다. 이러한 제한을 초과한 컨트롤 플레인 요청에는 제한이 발생할 수 있습니다. 메타데이터 요청은 경우에 따라 계정의 모든 메타데이터를 포함하는 계정 내의 master partition
에 대한 처리량을 사용할 수 있습니다. 처리량을 초과하는 컨트롤 플레인 요청에는 속도 제한(429초)이 발생합니다.
시작하려면 Azure Portal에서 Insights 창으로 이동합니다. 이 창에서 시스템 탭을 엽니다. 시스템 탭에는 두 개의 차트가 표시됩니다. 계정에 대한 모든 메타데이터 요청을 보여 주는 요청입니다. 두 번째는 계정의 메타데이터를 저장하는 계정의 master partition
에서 메타데이터 요청 처리량 사용을 보여 줍니다.
위의 상태 코드별 메타데이터 요청 그래프는 시간 범위를 늘리면 요청을 세분화하여 집계합니다. 5분 동안 사용할 수 있는 최대 시간 범위는 4시간입니다. 특정 세분성을 사용하여 더 큰 시간 범위에 걸쳐 메타데이터 요청을 모니터링하려면 Azure 메트릭을 사용합니다. 새 차트를 만들고 메타데이터 요청 메트릭을 선택합니다. 아래와 같이 오른쪽 위 모서리에서 시간 세분성에 대해 5분을 선택합니다. 또한 메트릭을 사용하면 사용자가 경고를 만들 수 있으므로 Insights보다 유용하게 사용할 수 있습니다.
다음 단계
다음 문서를 참조하여 데이터베이스 성능 개선에 대해 자세히 알아볼 수 있습니다.