스로틀링 진단 - Amazon DynamoDB

스로틀링 진단

애플리케이션에서 스로틀링이 발생할 경우 DynamoDB는 이러한 이벤트를 진단하는 데 도움이 되는 상세한 예외 정보와 대상 CloudWatch 지표들을 제공합니다.

이 섹션에서는 DynamoDB 애플리케이션의 스로틀링 이벤트를 이해하기 위한 체계적인 접근 방식을 제시합니다. 스로틀링 예외를 해석하는 방법, 더 깊은 인사이트를 위해 CloudWatch 지표와 연관 짓는 방법, DynamoDB 애플리케이션에서 스로틀링을 줄일 수 있는 변경 사항을 이해하는 방법을 보여 줍니다.

스로틀링 예외 이해

DynamoDB가 요청을 스로틀할 때, 상세한 진단 정보가 포함된 특정 예외를 반환합니다. 예를 들어, Java에서는 ProvisionedThroughputExceededException, RequestLimitExceeded, ThrottlingException 등이 포함됩니다.

각 예외에는 ThrottlingReasons가 포함되며, 이는 개별 ThrottlingReason의 모음으로 두 가지 주요 필드를 통해 스로틀링을 식별하고 이해하는 데 도움을 줍니다.

  • 사유 - <ResourceType><OperationType><LimitType> 형식으로 연결된 필드

  • 리소스 ARN - 영향을 받은 테이블 또는 인덱스의 Amazon 리소스 이름(ARN)

사유 필드는 일관된 패턴을 따르며, 정확히 무슨 일이 발생하는지 이해하는 데 도움이 됩니다.

  • ResourceType(스로틀링 대상): Table 또는 Index

  • OperationType(작업 종류): Read 또는 Write

  • LimitType(스로틀링이 발생한 사유):

    • KeyRangeThroughputExceeded: 테이블 또는 인덱스를 지원하는 특정 파티션의 읽기 또는 쓰기 용량 소비량이 내부 파티션별 처리량 한도를 초과했을 때 발생합니다.

    • ProvisionedThroughputExceeded: 프로비저닝된 테이블 또는 글로벌 보조 인덱스에서 읽기 또는 쓰기 소비량이 프로비저닝된 양을 초과했을 때 발생합니다.

    • AccountLimitExceeded: 온디맨드 테이블 또는 인덱스에서 읽기 또는 쓰기 소비율이 계정 수준에서 설정된 테이블 및 해당 인덱스의 최대 소비율을 초과했을 때 발생합니다. 이 할당량을 상향 조정할 수 있습니다.

    • MaxOnDemandThroughputExceeded: 온디맨드 테이블 또는 인덱스에서 읽기 또는 쓰기 소비율이 테이블 또는 인덱스에 대해 사용자가 제공한 최대 소비율을 초과했을 때 발생합니다. 이 값은 계정 한도까지 원하는 값으로 직접 상향 조정하거나 사용자 지정 한도가 없음을 나타내도록 -1로 설정할 수 있습니다.

리소스 ARN은 정확히 어떤 테이블 또는 인덱스가 스로틀된 상태인지 식별합니다.

  • 테이블: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]

  • 인덱스: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]/index/[index-name]

전체 스로틀링 사유 예제:

  • TableReadProvisionedThroughputExceeded

  • IndexWriteAccountLimitExceeded

이를 통해 정확히 어떤 리소스가 스로틀링되고 있는지, 어떤 유형의 작업이 이를 유발했는지, 스로틀링이 발생한 사유를 식별하는 데 도움이 됩니다.

예제 예외

예제 1: GSI에서 프로비저닝된 용량 초과

{ "ThrottlingReasons": [ { "reason": "IndexWriteProvisionedThroughputExceeded", "resource": "arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders/index/OrderDateIndex" } ], "awsErrorDetails": { "errorCode": "ProvisionedThroughputExceeded", "errorMessage": "The level of configured provisioned throughput for the index was exceeded", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

이 예제에서는 애플리케이션이 ProvisionedThroughputExceededException 사유로 IndexWriteProvisionedThroughputExceeded을 수신합니다. OrderDateIndex에 대한 쓰기 작업이 스로틀되고 있는데, 이는 쓰기 소비량이 GSI에 구성된 프로비저닝된 쓰기 용량을 초과했기 때문입니다.

예제 2: 온디맨드 최대 처리량 초과

{ "ThrottlingReasons": [ { "reason": "TableReadMaxOnDemandThroughputExceeded", "resource": "arn:aws:dynamodb:us-east-1:123456789012:table/UserSessions" } ], "awsErrorDetails": { "errorMessage": "Throughput exceeds the maximum OnDemandThroughput configured on table or index", "errorCode": "ThrottlingException", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

이 예제에서는 UserSessions 테이블에 대한 읽기 작업이 테이블에 구성된 최대 온디맨드 처리량 한도를 초과하여 스로틀되고 있습니다.

DynamoDB 스로틀링 진단 프레임워크

애플리케이션에서 스로틀링이 발생하면 다음 단계를 따라 문제를 진단하고 해결합니다.

1단계 - ThrottlingReason 세부 정보 분석

  1. 사유 필드를 확인하여 스로틀링의 구체적인 사유를 파악합니다. 사유에는 스로틀된 리소스 유형(테이블 또는 인덱스), 스로틀링을 유발한 작업 유형(읽기 또는 쓰기), 초과된 한도 유형(파티션, 프로비저닝된 처리량, 계정 한도)이 상세히 기록됩니다.

  2. resourceArn 필드를 확인하여 스로틀링 대상 리소스(테이블 또는 GSI)를 식별합니다.

  3. 이 정보를 종합하여 스로틀링 문제의 전체 맥락을 파악합니다.

    예를 들어, 스로틀링 사유가 TableWriteKeyRangeThroughputExceededProvisionedThroughputExceededException 예외를 수신하는 시나리오를 고려해 봅니다. 영향을 받은 리소스 ARN은 arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders입니다.

    이 조합은 CustomerOrders 테이블에 대한 쓰기 작업이 스로틀되고 있음을 알려줍니다. 스로틀링은 테이블 수준이 아닌 파티션 수준에서 발생하고 있습니다(테이블 스로틀링은 TableWriteProvisionedThroughputExceeded로 표시됨). 근본 원인은 특정 파티션 키 값 또는 범위에 대한 최대 처리량 용량을 초과했음을 나타내며, 이는 핫 파티션 문제를 의미합니다.

    예외 요소 간의 이러한 관계를 이해하면 적절한 완화 전략을 구현하는 데 도움이 됩니다. 이 경우 테이블의 전체 프로비저닝 용량을 늘리는 대신 핫 파티션 문제를 해결해야 합니다.

2단계 - 관련 CloudWatch 지표 식별 및 분석

  1. 지표 식별: DynamoDB의 각 스로틀링 사유는 스로틀링 이벤트 추적 및 분석을 위해 모니터링할 수 있는 특정 CloudWatch 지표와 직접 대응합니다. 스로틀링 사유로부터 체계적으로 적절한 CloudWatch 지표 이름을 도출할 수 있습니다.

  2. 다음 참조 테이블을 사용하여 스로틀링 사유에 해당하는 CloudWatch 지표를 확인하세요.

    전체 스로틀링 사유 및 CloudWatch 지표 참조
    범주 스로틀링 사유 기본 CloudWatch 지표
    프로비저닝된 용량 초과 TableReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents
    TableWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents
    IndexReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents(GSI)
    IndexWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents(GSI)
    파티션 한도 초과 TableReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents
    TableWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents
    IndexReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents(GSI)
    IndexWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents(GSI)
    온디맨드 최대값 초과 TableReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents
    TableWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents
    IndexReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents(GSI)
    IndexWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents(GSI)
    계정 한도 초과 TableReadAccountLimitExceeded ReadAccountLimitThrottleEvents
    TableWriteAccountLimitExceeded WriteAccountLimitThrottleEvents
    IndexReadAccountLimitExceeded ReadAccountLimitThrottleEvents(GSIs)
    IndexWriteAccountLimitExceeded WriteAccountLimitThrottleEvents(GSIs)

    예를 들어 IndexWriteProvisionedThroughputExceeded 수신한 경우, 최소한 ResourceArn에서 식별된 특정 인덱스에 대한 WriteProvisionedThroughputThrottleEvents CloudWatch 지표를 모니터링해야 합니다.

  3. CloudWatch에서 이러한 지표를 모니터링하여 스로틀링 이벤트의 빈도와 시점을 파악하고, 읽기 및 쓰기 스로틀링을 구분하며, 스로틀링이 증가하는 시간 패턴을 식별하고, 용량 활용도 추세를 추적합니다.

    DynamoDB는 각 테이블과 글로벌 보조 인덱스에 대한 상세한 지표를 게시합니다. 지표(ReadThrottleEvents, WriteThrottleEvents, ThrottledRequests)는 테이블과 인덱스 전반에 걸친 모든 스로틀링 이벤트를 집계합니다.

3단계 - CloudWatch Contributor Insights를 사용하여 스로틀된 키 및 높은 액세스 비율 확인(파티션 관련 스로틀링의 경우)

1단계에서 파티션 관련 문제(예: KeyRangeThroughputExceeded 오류)를 확인한 경우, CloudWatch Contributor Insights for DynamoDB를 통해 테이블 또는 인덱스에서 트래픽을 유발하고 스로틀링 이벤트가 발생하는 특정 키를 진단할 수 있습니다.

  1. ResourceARN을 기반으로 스로틀된 테이블 또는 인덱스에 대해 CloudWatch Contributor Insights를 활성화합니다.

    스로틀린 키 모드를 선택하면 가장 많이 스로틀된 키에만 집중할 수 있습니다. 이 모드는 스로틀링 발생 시에만 이벤트를 처리하므로 지속적인 모니터링에 이상적입니다. 또는 액세스된 키 및 스로틀된 키 모드를 사용하면 가장 많이 액세스된 키의 패턴을 파악하는 데 도움이 됩니다.

  2. 보고서를 분석하여 문제 패턴을 식별합니다. 액세스 또는 스로틀링 비율이 비정상적으로 높은 키를 찾아 스로틀링과 트래픽 패턴을 연관 지어 분석합니다. Contributor Insights 그래프와 DynamoDB CloudWatch 지표를 결합한 통합 대시보드를 생성할 수 있습니다.

CloudWatch Contributor Insights 활성화 및 사용에 대한 자세한 내용은 CloudWatch Contributor Insights for DynamoDB를 참조하세요.

4단계 - 적절한 솔루션 결정

스로틀링의 구체적인 원인을 진단한 후, 특정 상황에 기반하여 권장 솔루션을 구현합니다. 적절한 솔루션은 스로틀링 시나리오, 테이블의 용량 모드, 테이블 및 키 설계 결정, 액세스 패턴과 쿼리 효율성, 글로벌 및 보조 인덱스 구성, 전체 시스템 아키텍처 및 통합 지점 등 여러 요소에 따라 달라집니다.

특정 스로틀링 시나리오에 대한 자세한 해결 방법은 DynamoDB 스로틀링 해결 가이드 섹션을 참조하세요. 이 리소스는 특정 스로틀링 사유와 용량 모드 구성에 사용자 지정된 표적 개선 전략을 제공합니다.

5단계 - 진행 상황 모니터링

  1. 스로틀링 시나리오에 해당하는 CloudWatch 지표를 추적합니다.

  2. 스로틀링 이벤트 감소 추이를 관찰하여 완화 전략의 효과를 확인합니다.