View a markdown version of this page

Recopilación de elementos no utilizados en Amazon DocumentDB - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Recopilación de elementos no utilizados en Amazon DocumentDB

Amazon DocumentDB implementa una arquitectura de base de datos de control de concurrencia multiversión (MVCC) que crea nuevas versiones de entradas de documentos e índices para cada operación de actualización. Esta arquitectura permite el aislamiento de las transacciones, lo que evita que los cambios de una transacción aparezcan en otra.

Descripción de la recolección de basura en Amazon DocumentDB

La recopilación de elementos no utilizados (GC) es un proceso en segundo plano automatizado que mantiene un rendimiento y una disponibilidad óptimos del sistema en Amazon DocumentDB. Al igual que muchas bases de datos modernas, la arquitectura MVCC de Amazon DocumentDB crea nuevas versiones de documentos e índices con cada actualización. Cada operación de escritura consume un identificador MVCC único de un contador finito. Estos identificadores identifican a qué transacción pertenece una versión del documento y si se ha confirmado o anulado. Con el tiempo, estas versiones antiguas y sus ID de MVCC se acumulan, por lo que es necesario limpiarlas para evitar una degradación del rendimiento.

Funciones de la recopilación de elementos no utilizados

El recopilador de elementos no utilizados cumple tres funciones esenciales:

  • Recupera espacio de almacenamiento: elimina las versiones obsoletas de documentos e índices que las consultas activas ya no necesitan, lo que libera espacio para futuras operaciones de escritura.

  • Evita el desbordamiento de identificadores de MVCC: evita el desbordamiento de identificadores de MVCC mediante la administración del contador finito de identificadores de MVCC. Sin esta administración, el contador acabaría por alcanzar su límite, lo que obligaría a la base de datos a pasar a un modo temporal de solo lectura hasta que se reciclen los identificadores.

  • Mantiene el rendimiento de las consultas: mantiene un rendimiento óptimo de las consultas, ya que elimina las versiones inactivas de los documentos que, de otro modo, se acumularían y ralentizarían el procesamiento de las consultas.

Proceso de recopilación de elementos no utilizados

El proceso de GC funciona por colección y puede tener varios procesos ejecutándose simultáneamente en diferentes colecciones. El proceso consta de cuatro fases secuenciales:

  1. Identificación: el sistema identifica las versiones de documentos e índices a las que ya no hacen referencia las transacciones ni consultas activas.

  2. Carga de memoria: los documentos antiguos y las entradas del índice se cargan en la memoria si aún no están presentes.

  3. Eliminación: las versiones obsoletas se eliminan permanentemente para recuperar espacio de almacenamiento.

  4. Reciclaje de identificadores de MVCC: el sistema recicla los identificadores de MVCC de las versiones eliminadas para realizar nuevas operaciones.

Cuando la recopilación de elementos no utilizados termina de procesar las versiones antiguas de los documentos, elimina del sistema los identificadores del MVCC más antiguos. Esta limpieza es crucial para evitar el desbordamiento de los identificadores de MVCC, ya que se reciclan los identificadores de MVCC y los pone a disposición para nuevas operaciones de escritura en todo el clúster. Sin este proceso de reciclaje, el sistema acabaría agotando su contador finito de identificadores de MVCC y pasaría a un estado de solo lectura.

Programación de recopilación de elementos no utilizados

La recopilación de elementos no utilizados se ejecuta automáticamente en segundo plano a intervalos periódicos. La temporización y la frecuencia se ajustan dinámicamente en función de la carga del sistema, los recursos disponibles, el volumen de escritura y los niveles de consumo de los identificadores de MVCC. Cuando hay mucha actividad de escritura, el proceso de GC se ejecuta con más frecuencia para administrar el aumento del número de versiones de los documentos.

Arquitectura de almacenamiento y almacenamiento extendido

Amazon DocumentDB utiliza una arquitectura de almacenamiento sofisticada que separa el almacenamiento de documentos en dos segmentos distintos:

Segmento de almacenamiento base

El segmento de almacenamiento base contiene los datos y metadatos del documento principal. Este segmento almacena:

  • Contenido del documento que se ajusta al tamaño de página estándar (8 KB).

  • Metadatos del documento e información de estructura.

  • Índices principales y sus entradas.

  • Collection-level estadísticas y configuración.

Segmento de almacenamiento extendido

El segmento de almacenamiento extendido utiliza un almacén especializado de objetos de documentos de gran tamaño diseñado para gestionar documentos que superan el tamaño de página de almacenamiento estándar. Este segmento proporciona:

  • Gestión eficiente de documentos de gran tamaño: los documentos que superan el umbral de almacenamiento básico se mueven automáticamente al segmento de almacenamiento extendido.

  • Diseño de almacenamiento optimizado: el segmento utiliza un formato de almacenamiento diferente optimizado para objetos grandes, lo que reduce la fragmentación y mejora los patrones de acceso.

  • Recolección de basura independiente: el segmento de almacenamiento extendido tiene su propio proceso de recolección de basura que puede ejecutarse independientemente de la limpieza del almacenamiento base.

  • Acceso transparente: las aplicaciones acceden a documentos grandes sin problemas sin necesidad de saber qué segmento de almacenamiento contiene los datos.

El segmento de almacenamiento extendido es particularmente beneficioso para:

  • Colecciones con documentos que contienen matrices incrustadas de gran tamaño.

  • Documentos con amplias estructuras anidadas.

  • Colecciones que almacenan datos binarios o campos de texto de gran tamaño.

  • Aplicaciones con tamaños de documentos mixtos en las que algunos documentos superan con creces el tamaño promedio.

Supervisión de recopilación de elementos no utilizados

Métricas de nivel de clúster

AvailableMVCCIds

  • Ubicación: Amazon CloudWatch

  • Descripción: contador que muestra el número de operaciones de escritura restantes disponibles hasta un límite máximo de 1800 millones. Cuando este contador llega a cero, el clúster pasa al modo de solo lectura hasta que se recuperen y reciclen los identificadores. El contador disminuye con cada operación de escritura y aumenta a medida que la recopilación de elementos no utilizados recicla los identificadores de MVCC antiguos.

  • Recomendación: active una alarma cuando el valor disminuya por debajo de 1300 millones. Esta alerta temprana le permite tomar las medidas recomendadas que se describen más adelante.

LongestActiveGCRuntime

  • Ubicación: Amazon CloudWatch

  • Descripción: duración en segundos del proceso de recopilación de elementos no utilizados más prolongado. Se actualiza cada minuto y realiza un seguimiento únicamente de las operaciones activas, excluyendo los procesos que se completan en el intervalo de un minuto.

  • Recomendación: compárelos con los datos gcRuntimeStats históricos para identificar un comportamiento anormal en la recolección de basura, como la prolongación de los tiempos de ejecución durante las eliminaciones masivas.

Métricas a nivel de la colección

MVCCIDStats: MVCCIdScale

  • Ubicación: comando collStats de la base de datos

  • Descripción: mide la antigüedad del identificador de MVCC en una escala de 0 a 1, donde 1 indica la antigüedad máxima antes de que un clúster entre en estado de solo lectura. Utilice esta métrica junto con AvailableMVCCIds para identificar las colecciones que contienen los identificadores de MVCC más antiguos que están deteriorando el clúster.

  • Recomendación: mantenga los valores por debajo de 0,3 para cada colección.

gcRuntimeStats

  • Ubicación: comando collStats de la base de datos

  • Descripción: proporciona un historial de dos meses con las métricas de recopilación de elementos no utilizados, que incluye el total de ejecuciones, la duración promedio y la duración máxima. Solo incluye las operaciones de recopilación de elementos no utilizados que duren más de cinco minutos para garantizar estadísticas significativas.

storageSizeStats

  • Ubicación: comando collStats de la base de datos

  • Descripción: proporciona un desglose detallado de la utilización del almacenamiento en los diferentes segmentos de almacenamiento:

    • storageSegmentBase— Almacenamiento utilizado por el segmento de almacenamiento base para documentos estándar

    • storageSegmentExtended— Almacenamiento utilizado por el segmento de almacenamiento extendido para documentos de gran tamaño

  • Uso: ayuda a identificar las colecciones con un almacenamiento significativo de documentos de gran tamaño y a comprender los patrones de distribución del almacenamiento.

unusedStorageSize (nivel de colección)

  • Ubicación: comando collStats de la base de datos

  • Descripción: estima el espacio de almacenamiento no utilizado en una colección en función de las estadísticas muestreadas. Incluye el espacio de los documentos eliminados y de los segmentos vacíos. La métrica proporciona los totales combinados y los desgloses por segmento:

    • Combinados unusedBytes y en unusedPercent todos los segmentos de almacenamiento

    • storageSegmentBase— Espacio no utilizado específicamente en el segmento de almacenamiento base

    • storageSegmentExtended— Espacio no utilizado específicamente en el segmento de almacenamiento extendido

documentFragmentStats

  • Ubicación: comando collStats de la base de datos

  • Descripción: proporciona información detallada sobre los fragmentos de documentos y los datos inactivos de las colecciones. Los fragmentos de documentos representan las unidades de almacenamiento interno que utiliza el motor de base de datos, y los fragmentos inactivos indican datos a los que ya no se puede acceder pero que aún no se han recuperado. Esta métrica incluye:

    • totalDocFragmentsCount— Número total de fragmentos de documentos de la colección

    • deadDocFragmentsCount— Número de fragmentos que contienen datos muertos (inaccesibles)

    • deadDocFragmentsPercent— Porcentaje de fragmentos que contienen datos inactivos

    • deadDocFragmentBytes— Estimación de bytes consumidos por fragmentos de documentos inactivos

    • Per-segment desglose por storageSegmentBase y storageSegmentExtended

  • Uso: supervise esta métrica para comprender la eficacia de la recolección de basura e identificar las recolecciones que podrían beneficiarse de las operaciones de mantenimiento. Los porcentajes altos de fragmentos muertos indican que la recolección de basura puede estar retrasándose o que la recolección se beneficiaría de una optimización.

Métricas de nivel de índice

unusedStorageSize (nivel de índice)

  • Ubicación: comando indexStats de la base de datos.

  • Descripción: estima el espacio de almacenamiento no utilizado en un índice en función de las estadísticas muestreadas. Incluye el espacio de las entradas de índice obsoletas y de los segmentos vacíos.

  • Recomendación: utilice el comando reIndex para compilar los índices sin tiempo de inactividad y recuperar el espacio no utilizado. Consulte Administración de índices para obtener más detalles.

Ejemplo de salida de CollStats

El siguiente ejemplo muestra un collStats resultado típico con métricas de recolección y almacenamiento de basura:

{ "ns" : "Mvcc_consumption_test_db.mvcc_test_collection", "MVCCIdStats" : { "MVCCIdScale" : 0.03 }, "gcRuntimeStats" : { "numRuns" : 1, "historicalAvgRuntime" : 3295, "historicalMaxRuntime" : 3295, "lastRuntime" : 3295, "lastRuntimeStart" : ISODate("2025-06-24T08:47:14Z") }, "documentFragmentStats" : { "totalDocFragmentsCount" : 45000000, "deadDocFragmentsCount" : 2250000, "deadDocFragmentsPercent" : 5.0, "deadDocFragmentBytes" : 98304000, "storageSegmentBase" : { "totalDocFragmentsCount" : 30000000, "deadDocFragmentsCount" : 1500000, "deadDocFragmentsPercent" : 5.0, "deadDocFragmentBytes" : 65536000 }, "storageSegmentExtended" : { "totalDocFragmentsCount" : 15000000, "deadDocFragmentsCount" : 750000, "deadDocFragmentsPercent" : 5.0, "deadDocFragmentBytes" : 32768000 } }, "collScans" : 14, "count" : 30000000, "size" : 1320000000, "avgObjSize" : 44, "storageSize" : 6461497344, "storageSizeStats" : { "storageSegmentBase" : 4307664896, "storageSegmentExtended" : 2153832448 }, "capped" : false, "nindexes" : 2, "totalIndexSize" : 9649553408, "indexSizes" : { "_id_" : 1910661120, "c_1" : 7738892288 }, "unusedStorageSize" : { "unusedBytes" : 4201881600, "unusedPercent" : 65.05, "storageSegmentBase" : { "unusedBytes" : 2801254400, "unusedPercent" : 65.05 }, "storageSegmentExtended" : { "unusedBytes" : 1400627200, "unusedPercent" : 65.05 } }, "cacheStats" : { "collBlksHit" : 171659016, "collBlksRead" : 754061, "collHitRatio" : 99.5627, "idxBlksHit" : 692563636, "idxBlksRead" : 1177921, "idxHitRatio" : 99.8303 }, "idxScans" : 41823984, "opCounter" : { "numDocsIns" : 0, "numDocsUpd" : 20911992, "numDocsDel" : 0 }, "lastReset" : "2025-06-24 05:57:08.219711+00", "ok" : 1, "operationTime" : Timestamp(1750968826, 1) }

Preguntas frecuentes

¿Cómo puedo identificar si la recopilación de elementos no utilizados no funciona de manera eficiente?

Supervise estas señales de advertencia que indican una recopilación de elementos no utilizados ineficiente:

  • Excesiva acumulación de datos: unusedStorageSize las métricas aumentan de forma constante durante las tareas de escritura intensiva o las eliminaciones masivas, especialmente con índices de gran tamaño.

  • Porcentaje elevado de fragmentos muertos: documentFragmentStats muestra deadDocFragmentsPercent valores altos de forma constante (por encima del 10 al 15%).

  • Latencia de consulta degradada: aumento de la latencia de consulta debido a la acumulación de documentos muertos.

  • Duración prolongada de la GC: las operaciones de recolección de basura tardan más que los promedios históricos en. gcRuntimeStats

  • Procesamiento de GC elevado: alto, LongestActiveGCRuntime lo que indica que el recolector de basura no puede satisfacer las demandas del sistema.

¿La recopilación de elementos no utilizados afecta al rendimiento de mi base de datos?

En condiciones normales, la recopilación de elementos no utilizados tiene un impacto mínimo en el rendimiento. Sin embargo, si la recopilación de elementos no utilizados se retrasa, puede experimentar lo siguiente:

  • Mayores costos de almacenamiento debido a la acumulación de documentos muertos.

  • El rendimiento de las consultas es más lento debido a que las entradas de índice están obsoletas.

  • Modo temporal de solo lectura si se agotan los ID de MVCC.

  • Mayor uso de recursos durante las ejecuciones de recopilación intensivas, especialmente en instancias más pequeñas.

  • Reducción de la eficiencia en las operaciones del segmento de almacenamiento extendido para documentos de gran tamaño.

¿Puedo activar manualmente la recopilación de elementos no utilizados?

No, la recopilación de elementos no utilizados en Amazon DocumentDB no se puede activar manualmente. El sistema administra la recopilación de elementos no utilizados automáticamente como parte de sus operaciones de mantenimiento interno.

¿Qué alarmas debo configurar como práctica operativa recomendada?

Configure la supervisión tanto a nivel de clúster como de recopilación para garantizar un rendimiento óptimo de su sistema Amazon DocumentDB.

Para la supervisión a nivel de clúster, comience por crear una CloudWatch alarma de Amazon para la AvailableMVCCIds métrica con un umbral de 1 300 millones. Esto le da tiempo suficiente para tomar medidas antes de que la métrica llegue a cero, momento en el que el clúster pasará al modo de solo lectura. Ten en cuenta que esta métrica puede variar en función de tus patrones de uso específicos: algunos clientes ven que cae por debajo de los 1300 millones y, luego, se recupera por encima de los 1500 millones a medida que la recolección de basura termina su trabajo.

También es importante supervisar la LongestActiveGCRuntime métrica a través de Amazon CloudWatch. Esta métrica, junto con gcRuntimeStats, le permite comprender el rendimiento de la recopilación de elementos no utilizados en todo el sistema.

Para la supervisión a nivel de recopilación, céntrate en estas métricas clave:

  • MVCCIdScale— Esté atento a los valores crecientes que sugieren que los ID de MVCC están envejeciendo y pueden necesitar atención.

  • gcRuntimeStats— Identifique los procesos de recolección de basura que tardan de manera inusual o se extienden durante varios días.

  • documentFragmentStats— Controle deadDocFragmentsPercent los valores: los porcentajes consistentemente altos (por encima del 10 al 15%) pueden indicar que la recolección de basura se está retrasando.

  • storageSizeStatsy unusedStorageSize — Realice un seguimiento de los patrones de utilización del almacenamiento e identifique las colecciones con una cantidad significativa de espacio no utilizado en cualquiera de los segmentos de almacenamiento.

Las colecciones con operaciones de escritura frecuentes requieren atención especial, ya que generan más trabajo para el recopilador de elementos no utilizados. Compruebe estas métricas con más frecuencia para ver si hay recopilaciones con mucha actividad de escritura, a fin de garantizar que la recolección de basura esté a la altura de su carga de trabajo.

Tenga en cuenta que estas recomendaciones de supervisión sirven de punto de partida. A medida que se familiarice con el comportamiento de su sistema, tal vez desee ajustar estos umbrales para que se adapten mejor a sus patrones y requisitos de uso específicos.

¿Qué debo hacer si mis MVCCID disponibles caen por debajo de los 1300 millones?

Si tu AvailableMVCCIds métrica cae por debajo de los 1300 millones, toma medidas de inmediato para evitar que tu clúster entre en modo de solo lectura. En primer lugar, amplía el tamaño de la instancia para proporcionar más recursos informáticos al recolector de basura. Esto permite que su aplicación continúe con sus operaciones normales y, al mismo tiempo, proporciona la potencia adicional que necesita el recopilador de elementos no utilizados para ponerse al día.

Si la ampliación por sí sola no mejora la situación, considera la posibilidad de reducir las operaciones de escritura. Use la métrica MVCCIdScale para identificar qué colecciones específicas contienen identificadores de MVCC antiguos que requieren atención. Además, supervise documentFragmentStats para identificar las colecciones con altos porcentajes de fragmentos muertos que podrían estar contribuyendo a la ineficiencia de la recolección de basura.

Una vez que hayas identificado estas colecciones, es posible que tengas que reducir temporalmente las operaciones de escritura en ellas para que la recolección de basura se ponga al día. Durante el período de recuperación, supervisa de cerca la AvailableMVCCIds métrica para asegurarte de que tus acciones tengan el efecto deseado. Se considera que el clúster está en buen estado una vez que el valor AvailableMVCCIds vuelve a ser 1500 millones o más.

Recuerde que estos pasos son medidas preventivas para ayudar a que su sistema se recupere antes de que alcance un estado crítico. Cuanto antes tome medidas tras ver la disminución de la métrica por debajo de los 1300 millones, más probabilidades tendrá de evitar que sus operaciones de escritura se vean afectadas.