속도 제한 오류 검토

완료됨

요청은 request rate too large 상태 코드 예외에 대해 상태 코드 429를 반환합니다. 이 상태 코드는 Azure Cosmos DB에 대한 요청의 속도가 제한됨을 나타냅니다.

프로비전된 처리량을 사용하는 경우 워크로드에 대해 초당 요청 단위(RU/s)가 설정됩니다. 서비스에 대한 작업(읽기, 쓰기, 쿼리)은 RU(요청 단위)를 사용합니다. 지정된 초에 작업이 프로비전된 RU/s보다 많은 RU를 사용하는 경우 Azure Cosmos DB는 429 예외를 반환합니다. 이 예외가 발생하는 세 가지 이유를 검토해 보겠습니다.

요청 빈도가 높습니다.

요청 빈도가 많은 것은 429 예외가 발생하는 가장 일반적인 이유입니다. Azure Cosmos DB 인사이트 보고서 요청 탭 아래의 상태 코드별 총 요청에서 이 예외의 발생을 검토합니다. 데이터베이스에 대한 429 예외 및 성공한 요청의 비율을 검토하세요.

차트에서 429 예외를 볼 수 있지만 이 유형의 예외가 발생하면 많은 애플리케이션이 한 번 이상 다시 시도하도록 설계되어 있습니다. 따라서 애플리케이션에서 오류를 반환하지 않고 제한을 관리하는 것일 수 있습니다.

차트 분석에서 워크로드 요청의 1~5%가 429 예외를 생성하고 엔드투엔드 대기 시간이 허용 가능한 것으로 확인되면 아무 작업도 필요하지 않습니다. 이러한 적은 비율의 예외는 RU/s 사용률의 정상적인 신호입니다.

429 예외의 백분율이 5%보다 높은 경우 핫 파티션이 예외의 원인일 수 있습니다. 상대적으로 적은 수의 논리적 파티션 키가 초당 총 요청 단위를 많이 소비하는 경우 핫 파티션이 생성될 수 있습니다. 핫 파티션은 처리량을 여러 파티션에 더 잘 분산시키지 않도록 하여 429 예외를 유발할 수 있습니다.

핫 파티션이 있는지 확인하려면 Azure Cosmos DB 인사이트 보고서 처리량 탭에서 PartitionKeyRangeID별 정규화된 RU 사용량(%)을 검토하세요. 이 보고서에서 PartitionKeyRangeID는 각 실제 파티션을 식별합니다. 이 차트에서 상당한 소비로 식별된 모든 실제 파티션은 핫 파티션이 될 수 있습니다. 해당 실제 파티션이 지속적으로 100%로 유지되는 반면 다른 실제 파티션이 대부분의 시간 동안 훨씬 더 낮은 비율로 유지되는 경우 특히 그렇습니다.

429 예외를 발생시키는 요청 유형을 확인하기 위해 Azure 진단 로그에서 쿼리를 실행하면 요청 유형에서 사용하는 RU를 반환할 수 있습니다. 아래 샘플 쿼리는 429 예외가 발생한 작업에 대해 작업당 평균 RU를 분당 반환합니다.

AzureDiagnostics
| where TimeGenerated >= ago(24h)
| where Category == "DataPlaneRequests"
| summarize throttledOperations = dcountif(activityId_g, statusCode_s == 429), totalOperations = dcount(activityId_g), totalConsumedRUPerMinute = sum(todouble(requestCharge_s)) by databaseName_s, collectionName_s, OperationName, requestResourceType_s, bin(TimeGenerated, 1min)
| extend averageRUPerOperation = 1.0 * totalConsumedRUPerMinute / totalOperations 
| extend fractionOf429s = 1.0 * throttledOperations / totalOperations
| order by fractionOf429s desc

이러한 유형의 429 예외에 대한 몇 가지 가능한 해결 방법은 다음과 같습니다.

  • 핫 파티션으로 인해 429 예외가 발생하는 것으로 확인된 경우 파티션 키를 변경하는 것이 좋습니다.
  • 예외가 핫 파티션에 의해 발생하지 않는 경우 컨테이너에서 RU/s를 늘릴 수 있습니다.
  • 쿼리 문서 요청에서 예외가 발생하는 경우에는 높은 RU 요금으로 쿼리 문제를 해결합니다.

메타데이터 요청에 대한 속도 제한

메타데이터 작업의 양이 많으면 429 예외가 발생할 수 있습니다. 메타데이터 작업은 데이터베이스 또는 컨테이너를 나열, 생성, 수정 또는 삭제하는 작업입니다. 현재 프로비전된 처리량을 쿼리하는 것과 같은 작업일 수도 있습니다.

Azure Cosmos DB 인사이트 보고서 시스템 탭 아래의 용량을 초과한 메타데이터 요청(429)에서 이러한 유형의 429 예외 발생을 검토하세요.

이 유형의 요청에서 429 예외가 발생하는 경우 프로비전된 RU/s를 늘릴 것을 권장하지 않습니다. 프로비전된 RU/s를 늘리면 예외가 발생해도 영향을 받지 않습니다. 메타데이터 요청에 대한 시스템 예약 RU 제한이 있습니다.

메타데이터 요청으로 발생하는 429 예외에 대한 가능한 해결 방법은 다음과 같습니다.

  • 백오프 정책을 구현하여 메타데이터 요청을 낮은 속도로 수행
  • 애플리케이션 수명 동안 단일 DocumentClient 인스턴스 사용
  • 데이터베이스 및 컨테이너의 이름을 캐시

일시적인 서비스 오류로 인한 전송 속도 제한

이 유형의 요청에서 429 예외가 발생하는 경우 프로비전된 RU/s를 늘릴 것을 권장하지 않습니다. 프로비전된 RU/s를 늘리는 경우 예외가 발생해도 영향을 받지 않습니다. 요청을 다시 시도하는 것이 유일한 권장 솔루션입니다. 예외가 지속되면 Azure Portal에서 지원 티켓을 엽니다. 429 오류가 발생하는 것과 거의 동시에 일시적인 서비스 오류가 보고될 수도 있습니다.