다음을 통해 공유


진단 쿼리 관련 문제 해결

적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블

이 문서에서는 AzureDiagnostics(레거시) 및 리소스별(미리 보기) 테이블로 전송된 진단 로그를 사용하여 Azure Cosmos DB 계정의 문제를 해결하는 데 도움이 되는 간단한 쿼리를 작성하는 방법을 설명합니다.

Azure Diagnostics 테이블의 경우 모든 데이터가 단일 테이블에 기록되며 사용자는 쿼리할 범주를 지정해야 합니다.

리소스별 테이블의 경우 데이터는 리소스의 각 범주에 대한 개별 테이블에 기록됩니다(테이블 API에는 사용할 수 없음). 데이터를 훨씬 쉽게 다룰 수 있고 스키마를 더 정확하게 검색할 수 있으며 수집 대기 시간과 쿼리 시간 모두에서 성능이 향상되므로 이 모드를 사용하는 것이 좋습니다.

일반 쿼리

다음은 일반적인 문제 해결 쿼리 목록입니다.

실행하는 데 3밀리초 넘게 걸리는 작업 쿼리

지속 시간이 3밀리초보다 긴 작업을 찾습니다.

AzureDiagnostics 
| where toint(duration_s) > 3 and ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by clientIpAddress_s, TimeGenerated

작업을 실행하는 사용자 에이전트에 대한 쿼리

각 작업과 연결된 사용자 에이전트를 찾습니다.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| summarize count() by OperationName, userAgent_s

장기 실행 작업에 대한 쿼리

런타임을 5초 간격으로 범주화하여 오랫동안 실행된 작업을 찾습니다.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" 
| project TimeGenerated , duration_s 
| summarize count() by bin(TimeGenerated, 5s)
| render timechart

데이터베이스 계정의 상위 3개 파티션 간의 기울이기를 평가하기 위해 파티션 키 통계를 구합니다.

실제 파티션에 대한 공통 통계를 구하여 기울이기를 측정합니다.

AzureDiagnostics 
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics" 
| project SubscriptionId, regionName_s, databaseName_s, collectionName_s, partitionKey_s, sizeKb_d, ResourceId 

비용이 많이 드는 쿼리에 대한 요청 요금 구하기

가장 큰 쿼리에 대한 요청 요금(RU 단위)을 측정합니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 10.0
| project activityId_g, requestCharge_s
| join kind= inner (
AzureDiagnostics
| where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
| project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

가장 많은 RU/s를 사용하는 작업 찾기

작업이 사용하는 RU/s의 양을 기준으로 작업을 정렬합니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(responseLength_s), max(requestLength_s), max(requestCharge_s), count = count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

100RU/s를 초과하여 사용하는 모든 쿼리 가져오기

기준 금액보다 더 많은 RU/s를 사용하는 쿼리를 찾습니다.

이 쿼리는 DataPlaneRequestsQueryRunTimeStatistics의 데이터와 조인됩니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests" and todouble(requestCharge_s) > 100.0
| project activityId_g, requestCharge_s
| join kind= inner (
        AzureDiagnostics
        | where ResourceProvider =="MICROSOFT.DOCUMENTDB" and Category == "QueryRuntimeStatistics"
        | project activityId_g, querytext_s
) on $left.activityId_g == $right.activityId_g
| order by requestCharge_s desc
| limit 100

요청 요금 및 쿼리 실행 시간 가져오기

특정 쿼리에 대한 요청 요금 및 지속 시간 모두에 대한 통계를 가져옵니다.

AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "QueryRuntimeStatistics"
| join (
AzureDiagnostics
| where TimeGenerated >= ago(24hr)
| where Category == "DataPlaneRequests"
) on $left.activityId_g == $right.activityId_g
| project databasename_s, collectionname_s, OperationName1 , querytext_s,requestCharge_s1, duration_s1, bin(TimeGenerated, 1min)

다양한 작업에 대한 배포 가져오기

리소스 배포를 기준으로 작업을 그룹화합니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize count = count()  by OperationName, requestResourceType_s, bin(TimeGenerated, 1h) 

파티션이 사용한 최대 처리량 가져오기

실제 파티션의 최대 처리량을 가져옵니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2h) 
| summarize max(requestCharge_s) by bin(TimeGenerated, 1h), partitionId_g

초당 파티션 키 RU/s 사용량에 대한 정보 가져오기

파티션 키별 초당 RU/s 사용량을 측정합니다.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s, TimeGenerated 
| order by TimeGenerated asc 

특정 파티션 키에 대한 요청 요금 가져오기

파티션 키당 요청 요금을 측정합니다.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where parse_json(partitionKey_s)[0] == "2" 

특정 기간에 RU/s를 가장 많이 사용한 상위 파티션 키 가져오기

시간 범위 내의 요청 단위 사용량을 기준으로 파티션 키를 정렬합니다.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.DOCUMENTDB" and Category == "PartitionKeyRUConsumption" 
| where TimeGenerated >= datetime("11/26/2019, 11:20:00.000 PM") and TimeGenerated <= datetime("11/26/2019, 11:30:00.000 PM") 
| summarize total = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, partitionKey_s 
| order by total desc

스토리지 크기가 8GB보다 큰 파티션 키에 대한 로그 가져오기

파티션 키당 스토리지 크기로 필터링된 파티션 키에 대한 로그를 찾습니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="PartitionKeyStatistics"
| where todouble(sizeKb_d) > 800000

작업, 요청 요금 또는 응답 길이에 대한 P99 또는 P50 대기 시간 가져오기

작업 대기 시간, RU/s 사용량 및 응답 길이에 대한 성능을 측정합니다.

AzureDiagnostics
| where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="DataPlaneRequests"
| where TimeGenerated >= ago(2d)
| summarize percentile(todouble(responseLength_s), 50), percentile(todouble(responseLength_s), 99), max(responseLength_s), percentile(todouble(requestCharge_s), 50), percentile(todouble(requestCharge_s), 99), max(requestCharge_s), percentile(todouble(duration_s), 50), percentile(todouble(duration_s), 99), max(duration_s), count() by OperationName, requestResourceType_s, userAgent_s, collectionRid_s, bin(TimeGenerated, 1h)

컨트롤 플레인 로그 가져오기

ControlPlaneRequests를 사용하여 긴 컨트롤 플레인을 가져옵니다.

키 기반 메타데이터 쓰기 액세스 사용 안 함에 설명된 플래그를 켜고, Azure PowerShell, Azure CLI 또는 Azure Resource Manager를 사용하여 작업을 실행해야 합니다.

AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| summarize by OperationName 

다음 단계