Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
¿Por qué tardan tanto en procesarse mis secuencias de DynamoDB?
Quiero saber por qué mis secuencias de Amazon DynamoDB tardan tanto en procesarse.
Resolución
Cuando usa AWS Lamdba para consumir secuencias de DynamoDB, es posible que tenga registros que se escriban en una tabla pero que Lambda no procese. Estos registros pueden incluso tardar varias horas en procesarse. Para solucionar la causa, revise la métrica IteratorAge de Lambda.
Cuando IteratorAge aumenta, Lambda no procesa de manera eficiente los registros que se escriben en la secuencia de DynamoDB. La métrica IteratorAge puede aumentar por los siguientes motivos.
Errores de invocación
Lambda se ha diseñado para procesar lotes de registros de forma secuencial y volver a intentarlo en caso de error. Si una función devuelve un error cada vez que se invoca, la función de Lambda sigue intentando procesar los registros. La función sigue intentando procesar los registros hasta que caduquen o superen la antigüedad máxima configurada en la asignación de orígenes de eventos. Como los registros presentes en las secuencias no se están procesando, es posible que haya un pico en la métrica IteratorAge. Puede comprobar la métrica de errores de Lambda para ver si hay picos en la métrica de errores. O bien, revise los registros de Lambda para obtener más información.
Para evitar que los errores de invocación provoquen un pico en la métrica IteratorAge, envíe los registros a una cola de mensajes fallidos (DLQ). Al crear la asignación de orígenes de eventos, introduzca la siguiente información para los parámetros específicos:
- Reintentos: Este parámetro es el número de veces que se ejecuta la función de Lambda cuando la función tiene un error. Actualice este valor según su caso de uso y envíe los registros al DLQ después de que la función se reintente un número específico de veces.
- Dividir lote en caso de error: Este parámetro divide un lote en dos antes de que la función vuelva a intentar el lote. Utilice este parámetro para dividir el lote y continuar la invocación con los lotes más pequeños. Dividir el lote puede ayudar a aislar los registros incorrectos que causan el error de invocación.
Errores de limitación
Al usar las secuencias de DynamoDB, se recomienda no tener más de dos consumidores por partición para evitar la limitación. Dado que Lambda procesa los registros de forma secuencial, no puede continuar procesándolos si una invocación actual está limitada. Si debe usar más de dos consumidores, utilice Amazon Kinesis o un patrón de distribución ramificada. O bien, utilice un límite de simultaneidad en Lambda para evitar la limitación.
Rendimiento de Lambda
El rendimiento de Lambda es la cantidad de tiempo que tarda una sola invocación de una función de Lambda en procesar un registro o un lote de registros. Los siguientes factores pueden afectar al rendimiento de una función de Lambda:
Duración de la versión ejecutable
Si el valor de la métrica de duración es alto, el rendimiento de la función es bajo y se produce un aumento en la métrica IteratorAge de la función. Para reducir la duración del tiempo de ejecución de la función, aumente la memoria asignada a una función.
También puede optimizar el código de su función para que los registros se procesen en menos tiempo.
Ejecuciones simultáneas de Lambda
La simultaneidad es el número de solicitudes en curso que la función de Lambda gestiona al mismo tiempo. Un aumento en el número de invocaciones simultáneas de Lambda puede mejorar el procesamiento de los registros de las secuencias. Para cada solicitud simultánea, Lambda aprovisiona una instancia independiente de su entorno de ejecución. El número máximo de ejecuciones simultáneas de Lambda se calcula de la siguiente manera:
Ejecuciones simultáneas = Número de particiones × Lotes simultáneos por partición (factor de paralelización)
En una secuencia de DynamoDB, se produce una asignación uno a uno entre la cantidad de particiones de la tabla y la cantidad de particiones de la secuencia. El número de particiones viene determinado por el tamaño de la tabla y su rendimiento. Cada partición de la tabla puede atender hasta 3000 unidades de solicitud de lectura o 1000 unidades de solicitud de escritura, o la combinación lineal de ambas. Para aumentar la simultaneidad, aumente la capacidad aprovisionada de la tabla para aumentar la cantidad de particiones. Puede configurar la cantidad de lotes simultáneos por partición en la asignación de orígenes de eventos. El valor predeterminado es 1 y se puede aumentar hasta 10. Por ejemplo, si la tabla tiene 10 particiones y los lotes simultáneos por partición están establecidos en 5, puede tener hasta 50 ejecuciones simultáneas.
Para procesar la modificación por elemento en el orden correcto en un momento dado, los elementos con la misma clave de partición van al mismo lote. La clave de partición de la tabla debe tener una cardinalidad alta y el tráfico no puede generar teclas de acceso rápido. Por ejemplo, si establece el valor de Lotes simultáneos por partición en 10 y el tráfico de escritura se dirige a una sola clave de partición, solo puede tener una ejecución simultánea por partición.
Tamaño del lote e intervalo del lote
El comportamiento de procesamiento por lotes de Lambda puede reducir el rendimiento de la función si no se ajusta correctamente. Para optimizar el procesamiento de las secuencias de DynamoDB, ajuste el intervalo del lote y el tamaño del lote en función de su caso de uso.
Si el tamaño del lote se establece en un valor demasiado bajo, la función se invoca con frecuencia con un número reducido de registros. Estas invocaciones frecuentes ralentizan el procesamiento de la secuencia. Si el valor del tamaño del lote es demasiado alto, es posible que la duración de la función aumente.
Si el valor del intervalo del lote y el número de registros de ese intervalo no están optimizados, es posible que tenga invocaciones innecesarias de la misma partición. Estas invocaciones innecesarias pueden ralentizar el procesamiento de la secuencia. Si el valor del intervalo del lote es demasiado alto, es posible que espere más tiempo para que la función procese las secuencias. Este mayor tiempo de procesamiento aumenta IteratorAge.
Para aumentar el rendimiento y reducir IteratorAge, se recomienda probar varias combinaciones de intervalo de procesamiento por lotes y tamaño de lote.
Información relacionada
Comprensión del escalamiento y el rendimiento de Lambda
Comprensión del escalamiento de funciones de Lambda
Uso del adaptador de Amazon Kinesis de DynamoDB Streams para procesar registros de secuencias
- Temas
- Database
- Etiquetas
- Amazon DynamoDB
- Idioma
- Español

Contenido relevante
- preguntada hace un año
- preguntada hace 8 meses
OFICIAL DE AWSActualizada hace 2 años
OFICIAL DE AWSActualizada hace 2 años
OFICIAL DE AWSActualizada hace 3 años