DynamoDB LimitExceededException

TL;DR: Emitiste demasiadas operaciones del plano de control a la vez (o alcanzaste un límite de tabla/cuenta). Hasta 500 tablas e índices pueden estar en estado CREATING/UPDATING/DELETING en su cuenta a la vez. Serializa las operaciones de tu tabla, espera ACTIVE y vuelve a intentarlo con backoff.

Qué significa

LimitExceededException: Too many operations for a given subscriber.

Este es un error de plano de control — proviene de CreateTable, UpdateTable, DeleteTable, la creación de índices, las restauraciones y llamadas similares, no de GetItem/PutItem/Query. DynamoDB te está diciendo que has superado un límite de concurrencia o de cuenta. Es un HTTP 400, y AWS lo lista como reintentable — la condición se despeja a medida que terminan las operaciones en vuelo.

Por qué ocurre

  • Demasiadas operaciones de tabla/índice concurrentes — el número acumulado de tablas e índices en estado CREATING, DELETING o UPDATING no puede superar 500 por cuenta/región. (Se permiten hasta 500 operaciones de tabla simultáneas por cuenta — CreateTable, UpdateTable, DeleteTable, UpdateTimeToLive, RestoreTableFromBackup, RestoreTableToPointInTime — y solo hasta 250 solicitudes concurrentes al crear tablas con índices secundarios.)
  • Despliegues de stack masivos — CloudFormation/CDK/Terraform creando o desmontando muchas tablas (o muchos GSI) simultáneamente rebasa el presupuesto de concurrencia.
  • Cuotas de recursos de la cuenta — alcanzar la cuota flexible de 2.500 tablas por cuenta/región, o el límite de 50 trabajos de importación simultáneos.
  • Uso indebido de DynamoDB Streams — llamar a GetRecords con un Limit mayor que 1000, o más de 2 procesos leyendo del mismo shard de streams a la vez.
  • Nota: un segundo UpdateTable emitido mientras la misma tabla sigue en UPDATING aparece como ResourceInUseException, no como este error — pero ambos significan "espera primero a ACTIVE".

Cómo solucionarlo

  1. Serializa las operaciones de plano de control — espera a que una tabla (y cada GSI) pase a ACTIVE antes de emitir el siguiente cambio sobre ella. Sondea DescribeTable y condiciona a TableStatus === 'ACTIVE'.
  2. Reintenta con backoff exponencial — el límite es transitorio; un reintento con backoff suele tener éxito una vez que las operaciones en vuelo drenan.
  3. Modera los despliegues masivos — divide un stack grande para no crear cientos de tablas/GSI a la vez, o añade un orden explícito con DependsOn para que no se disparen todos juntos.
  4. Comprueba tus cuotas de servicio — si estás cerca del límite de tablas por cuenta, solicita un aumento de cuota en Service Quotas en lugar de reintentar eternamente.
  5. Añade GSI de uno en uno — solo puedes crear o eliminar un índice secundario global por operación UpdateTable, así que serializa los cambios de índice y espera cada backfill.

FAQ

¿Cómo soluciono LimitExceededException en DynamoDB? Deja de emitir operaciones de plano de control (CreateTable/UpdateTable/DeleteTable/cambios de índice) en paralelo. Espera a que cada tabla e índice llegue a ACTIVE antes del siguiente cambio, mantén el recuento de tablas en CREATING/UPDATING/DELETING por debajo del tope de la cuenta, y reintenta con backoff exponencial.

¿Es LimitExceededException un error de throttling? Es un error de concurrencia/límite de plano de control, no throttling de plano de datos. El throttling de plano de datos aparece como ProvisionedThroughputExceededException, ThrottlingException o RequestLimitExceeded en su lugar.

Apunta DynoTable a Local

DynoTable es un cliente de plano de datos — GetItem, Query y Scan no consumen el presupuesto de concurrencia de plano de control que vigila este error. Si un script de despliegue choca con LimitExceededException al crear tablas, usa DynoTable para explorar las tablas que ya llegaron a ACTIVE y validar el esquema desde Ajustes de la tabla mientras tu IaC reintenta. Para stacks locales, ejecuta DynamoDB Local con -sharedDb y conéctate mediante un perfil Local (Ejecutar DynamoDB Local) para que puedas inspeccionar despliegues parciales sin esperar a que cada GSI termine en AWS. El planificador de diseño de tabla única ayuda a esbozar formas de tabla antes de que dispares otro CreateTable en una cuenta ocupada.

Errores relacionados

Fuentes

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.