DynamoDB ThrottlingException
TL;DR — 요청 비율이 한도를 초과했습니다. 다시 시도할 수 있습니다. 물러서서 다시 시도하세요(SDK는 기본적으로 이 작업을 수행합니다). 지속되면 제어 영역 API(CreateTable, UpdateTable, DescriptionTable)를 너무 자주 호출하거나 계정 수준 제한에 도달한 것입니다.
무엇을 의미하는가
ThrottlingException: Rate of requests exceeds the allowed throughput.ThrottlingException(및 관련 RequestLimitExceeded)은 프로비저닝된 테이블의 자체 RCU/WCU 설정이 아닌 **속도 제한**을 나타냅니다. HTTP 400으로 다시 표시되며 **재시도 가능**합니다. 이는 **제어 플레인** 작업이 너무 빠르게 수행되는 경우 가장 일반적이며 **주문형** 테이블의 경우 요청 비율이 너무 높을 때(구성된 최대 주문형 처리량을 초과하는 경우 포함) 모든 데이터 플레인 작업에 대해 반환될 수 있습니다. 오류에는 제한된 리소스의 이름과 도달한 제한을 지정하는 ThrottlingReason` 필드가 포함됩니다.
왜 발생하는가
- 폴링 제어 플레인 API — 긴밀한 루프에서
DescribeTable,ListTables,UpdateTable를 호출합니다(예: 테이블이ACTIVE가 될 때까지 대기). - 신속하게 많은 테이블 생성/삭제 — 동시 제어 플레인 작업이 제한됩니다(한 번에
CREATING/UPDATING/DELETING의 테이블/인덱스 500개 이하). - 구성된 주문형 최대 처리량 — 주문형 테이블에서
MaxReadRequestUnits/MaxWriteRequestUnits를 초과하거나 GSI가ThrottlingException를 반환합니다. - 온디맨드 테이블의 갑작스러운 버스트 — 새 테이블은 초당 쓰기 4,000회 및 읽기/초 12,000회에서 시작하며, 30분 이내에 이전 최고치의 두 배를 초과하면 DynamoDB가 확장될 때까지 제한될 수 있습니다.
어떻게 해결하는가
- 지수 백오프 + 지터로 재시도 — AWS SDK는 이 작업을 자동으로 수행합니다. 재시도를 활성화한 상태로 유지하고 적응형 재시도 모드를 고려하세요.
- 타이트 폴링 제어 평면 API를 중지합니다. 핫 루프 대신 합리적인 일정에 따라 폴링하는 웨이터(
waitUntilTableExists)를 사용합니다. - 데이터 영역 쓰기를 일괄 처리하고 속도를 조절합니다. 대량 로드를 점진적으로 늘려 주문형 용량을 사용자에 맞게 확장할 수 있습니다.
- 한 번에 수십 개를 생성하는 대신 시간이 지남에 따라 테이블 작업을 분산하세요.
- 응답에서
ThrottlingReason를 확인합니다. 제한된 리소스 및 제한의 이름을 지정합니다. 제어 영역과 주문형 데이터 영역 조절에는 서로 다른 수정이 필요합니다.
예제
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
import {waitUntilTableExists} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({});
// a waiter polls on a backoff schedule — not a tight DescribeTable loop
await waitUntilTableExists({client, maxWaitTime: 120}, {TableName: 'Orders'});FAQ
ThrottlingException은 ProvisionedThroughputExceededException과 동일합니까?
아니요. ProvisionedThroughputExceededException은 테이블의 프로비저닝 용량 초과로 인한 데이터 영역 오류입니다. ThrottlingException은 계정 전체 제한이 낮은 제어 영역 작업(CreateTable, UpdateTable, DescribeTable)과 매우 높은 볼륨 버스트에서 가장 일반적입니다.
DynamoDB ThrottlingException을 수정하려면 어떻게 해야 합니까?
지수 백오프 및 지터를 사용하여 재시도합니다. AWS SDK는 이 작업을 자동으로 수행합니다. 타이트 폴링 제어 평면 API를 중지하고(waitUntilTableExists과 같은 웨이터 사용), 대량 로드를 점진적으로 늘려 주문형 용량이 사용자에 맞게 확장될 수 있도록 하며, 시간이 지남에 따라 테이블 작업을 분산시킵니다.
DynoTable에서 크기 확인
제어 플레인 제한이 테이블 설정을 차단하는 경우 루프에서 DescribeTable를 폴링하는 대신 DynoTable을 사용하여 기존 테이블을 찾아봅니다. 단일 새로 고침 후 ⌘K가 있는 테이블을 엽니다. 온디맨드 제한을 트리거하는 대량 로드의 경우 램프하기 전에 트래픽 크기를 pricing calculator로 조정합니다.
⌘P로 프로필을 전환합니다. 설정 → 프로필의 연결 테스트에서 계정을 확인합니다. Connect to AWS 및 Install을 참조하세요.
출처
- Error handling with DynamoDB — ThrottlingException (2026-07-13 인증)
- Troubleshooting throttling in Amazon DynamoDB (2026-07-13 인증)
관련 오류
- ProvisionedThroughputExceededException — 테이블당 용량 조절.
- RequestLimitExceeded — 계정 요청 비율 할당량입니다.
- On-demand throughput exceeded — 주문형 테이블은 여전히 조절이 가능합니다.
- ResourceInUseException — 테이블 사용 중/이미 존재합니다.
- 학습: On-demand vs provisioned
참고 자료
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Troubleshooting throttling in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB on-demand capacity mode — Amazon DynamoDB Developer Guide
- DynamoDB maximum throughput for on-demand tables — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.