DynamoDB LimitExceededException
TL;DR — 한 번에 너무 많은 제어 영역 작업을 실행했습니다(또는 테이블/계정 제한에 도달했습니다). 계정 전체에서 한 번에 최대 500개의 테이블과 인덱스가 CREATING/UPDATING/DELETING 상태일 수 있습니다. 테이블 작업을 직렬화하고 ACTIVE 동안 기다린 후 백오프로 다시 시도하세요.
무엇을 의미하는가
LimitExceededException: Too many operations for a given subscriber.이는 제어판 오류입니다. 이는 GetItem/PutItem/Query가 아닌 CreateTable, UpdateTable, DeleteTable, 인덱스 생성, 복원 및 유사한 호출에서 발생합니다. DynamoDB에서는 동시성 또는 계정 제한을 초과했다고 알려줍니다. HTTP 400이며 AWS는 이를 재시도 가능으로 표시합니다. 진행 중인 작업이 완료되면 조건이 지워집니다.
왜 발생하는가
- 동시 테이블/인덱스 작업이 너무 많음 —
CREATING,DELETING또는UPDATING상태의 테이블 및 인덱스의 누적 수는 계정/리전당 500개를 초과할 수 없습니다. (계정당 최대 500개의 동시 테이블 작업이 허용됩니다 —CreateTable,UpdateTable,DeleteTable,UpdateTimeToLive,RestoreTableFromBackup,RestoreTableToPointInTime— 보조 인덱스가 있는 테이블을 생성할 경우 동시 요청은 최대 250개입니다.) - 대량 스택 배포 — CloudFormation/CDK/Terraform에서 많은 테이블(또는 여러 GSI)을 동시에 생성하거나 해체하면 동시성 예산이 초과됩니다.
- 계정 리소스 할당량 — 계정/리전당 테이블 2,500개의 소프트 할당량 또는 50개의 동시 가져오기 작업 제한에 도달합니다.
- DynamoDB 스트림 오용 — 1000보다 큰
Limit로GetRecords를 호출하거나 동일한 스트림 샤드에서 동시에 읽는 2개 이상의 프로세스. - 참고: 동일한 테이블이 여전히 ResourceInUseException와 같은
UPDATING표면인 동안 두 번째UpdateTable가 발행되었습니다. 이 오류는 아니지만 둘 다 "먼저ACTIVE를 기다리십시오"를 의미합니다.
어떻게 해결하는가
- 제어 플레인 작업 직렬화 — 테이블(및 각 GSI)이
ACTIVE이 될 때까지 기다린 후 테이블에 다음 변경 사항을 적용합니다.DescribeTable을 폴링하고TableStatus === 'ACTIVE'를 게이트로 연결합니다. - 지수 백오프로 재시도 — 제한은 일시적입니다. 백오프된 재시도는 일반적으로 진행 중인 작업이 소모되면 성공합니다.
- 스로틀 대량 배포 — 수백 개의 테이블/GSI를 한 번에 생성하지 않도록 대규모 스택을 분할하거나 모두 함께 실행되지 않도록 명시적인
DependsOn순서를 추가합니다. - 서비스 할당량을 확인하세요 — 계정당 테이블 수 제한에 근접한 경우 영원히 재시도하는 대신 서비스 할당량의 할당량 증가를 요청하세요.
- 한 번에 하나씩 GSI 추가 —
UpdateTable작업당 하나의 글로벌 보조 인덱스만 생성하거나 삭제할 수 있으므로 인덱스 변경 사항을 직렬화하고 각 백필을 기다립니다.
FAQ
DynamoDB에서 LimitExceededException을 어떻게 수정합니까? 제어 영역 작업(CreateTable/UpdateTable/DeleteTable/인덱스 변경) 실행을 병렬로 중지합니다. 다음 변경 전에 각 테이블과 인덱스가 ACTIVE에 도달할 때까지 기다리고, CREATING/UPDATING/DELETING 중인 테이블 수를 계정 한도 이하로 유지하고 지수 백오프로 다시 시도하세요.
LimitExceededException은 조절 오류인가요? 이는 데이터 평면 제한이 아니라 제어 평면 동시성/제한 오류입니다. 대신 데이터부 제한 표면은 ProvisionedThroughputExceededException, ThrottlingException 또는 RequestLimitExceeded로 표시됩니다.
DynoTable을 Local에 연결
DynoTable은 데이터 플레인 클라이언트입니다. — GetItem, Query 및 Scan는 소비하지 않습니다.
제어 평면 동시성 예산은 이 오류를 방지합니다. 배포 스크립트가 히트하는 경우
LimitExceededException 테이블을 생성하는 동안 DynoTable을 사용하여 테이블을 찾아보세요.
이미 ACTIVE에 도달했고 테이블 설정으로 스키마를 검증하는 동안
IaC가 재시도합니다. 로컬 스택의 경우 -sharedDb로 DynamoDB Local을 실행하고
로컬 프로필(Running DynamoDB Local)을 통해 연결하므로
AWS에서 모든 GSI가 완료될 때까지 기다리지 않고 부분 배포를 검사할 수 있습니다.
single-table design planner는 스케치에 도움이 됩니다.
바쁜 계정에서 또 다른 CreateTable를 실행하기 전에 테이블 모양을 만드세요.
관련 오류
- ResourceInUseException — 이미 수정 중이거나 이미 존재하는 테이블에 대한 작업입니다.
- ThrottlingException — 데이터/제어 평면 속도 제한.
- RequestLimitExceeded — 계정 요청 속도 제한.
- 학습: DynamoDB migrations
출처
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (2026-07-13 인증)
- UpdateTable — Amazon DynamoDB API Reference (2026-07-13 인증)
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide (2026-07-13 인증)