Comprensión de la limitación de escritura del Índice Secundario Global (GSI) y la contrapresión en DynamoDB
La limitación de contrapresión de GSI representa uno de los escenarios de limitación más complejos de DynamoDB porque crea una relación indirecta entre las operaciones de escritura y la limitación: la aplicación escribe en una tabla base, pero sufre una limitación debido a las restricciones de capacidad en uno o varios índices.
Comprensión de la limitación por contrapresión de GSI
Cuando escribe en una tabla de DynamoDB, los índices secundarios globales (GSI) en esa tabla se actualizan de forma asincrónica mediante un modelo de consistencia final. Si un GSI no tiene la capacidad suficiente para gestionar estas actualizaciones, DynamoDB limita las escrituras en la tabla base para mantener la coherencia de datos. Esto se llama contrapresión de GSI. Para obtener más información sobre cómo funcionan los GSI, consulte Índices secundarios globales en DynamoDB.
A diferencia de la limitación directa de tablas, en la que el recurso al que se accede es también el que provoca la limitación, la contrapresión de GSI crea una dependencia entre la tabla base y sus índices. Incluso si la tabla base tiene una capacidad suficiente, las escrituras se limitarán si algún GSI asociado no puede gestionar el volumen de actualización. Es especialmente importante entender esta relación porque las restricciones por partición se aplican de forma independiente a la tabla base y a cada GSI; cada una tiene su propia estructura de particiones y los límites de rendimiento correspondientes.
La partición de GSI se basa en la clave de partición de GSI, que suele ser diferente de la clave de partición de la tabla base. Aunque el acceso a la tabla base esté perfectamente distribuido entre las particiones, es posible que las actualizaciones de GSI se concentren en particiones específicas, lo que generaría puntos calientes en el GSI. Para obtener información sobre las prácticas recomendadas generales sobre el diseño de claves de partición para tablas y para GSI, consulte Diseño de claves de partición de DynamoDB.
Por ejemplo, si la tabla base utiliza customerId como clave de partición (distribuida uniformemente) pero el GSI utiliza status como clave de partición (con valores posibles limitados, como “activo”, “pendiente” o “cerrado”), las actualizaciones de los elementos con valores de estado populares pueden crear particiones calientes de GSI incluso cuando el acceso a la tabla base esté equilibrado. Esto crea un escenario particularmente desafiante en el que la aplicación podría sufrir una limitación debido a las particiones calientes de GSI, aunque la tabla base y el GSI tengan suficiente capacidad general y el patrón de acceso de la tabla base parezca estar bien distribuido.
Aunque la excepción de limitación apunta al GSI (a través de ResourceArn), la operación que en realidad se está limitando es la escritura en la tabla base. Esto puede resultar confuso porque la aplicación escribe en la tabla base, pero recibe una excepción relacionada con el GSI.
Tipos de limitación del GSI
La limitación de la contrapresión de GSI se manifiesta mediante diferentes tipos de excepciones en función de la restricción de capacidad específica:
-
Se ha superado la capacidad aprovisionada de GSI: se produce cuando el GSI carece de unidades de capacidad de escritura suficientes para gestionar las actualizaciones de las operaciones de la tabla base. Esto produce una
ProvisionedThroughputExceededExceptioncon el motivo IndexWriteProvisionedThroughputExceeded y elResourceArnapunta directamente al GSI específico que está experimentando restricciones de capacidad. -
Se ha superado el rendimiento máximo bajo demanda de GSI: se produce cuando las operaciones de escritura de GSI superan los límites máximos configurados en las tablas bajo demanda. Esto produce una
ThrottlingExceptioncon el motivo IndexWriteMaxOnDemandThroughputExceeded, lo que identifica el GSI específico con las restricciones de rendimiento configuradas. -
Se han superado los límites de partición de GSI: se produce cuando las particiones de GSI individuales superan sus límites de rendimiento (particiones calientes), incluso si la capacidad general del GSI parece suficiente. Esto genera una
ThrottlingExceptioncon el motivo IndexWriteKeyRangeThroughputExceeded, que indica problemas de particiones calientes en el GSI específico identificado en elResourceArn. Esto es particularmente importante porque la distribución de particiones del GSI puede diferir significativamente de la distribución de particiones de la tabla base, lo que crea puntos calientes en el GSI incluso cuando el acceso a la tabla base se distribuye de manera uniforme. -
Se han superado los límites de las cuentas de GSI: se desencadenan cuando las operaciones de escritura en un GSI específico superan los límites de rendimiento regional por tabla (o cualquier GSI individual de esa tabla) establecidos por cuenta. DynamoDB devuelve una
ThrottlingExceptioncon el motivo IndexWriteAccountLimitExceeded, que apunta al GSI que llevó su uso más allá de los límites de la cuenta. Esta limitación se produce de forma independiente para cada GSI que supera el límite. Para obtener información sobre las cuotas por tabla, por cuenta, regionales y de servicio, consulte Cuotas en Amazon DynamoDB.