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, evitando que los cambios de una transacción aparezcan en otra.
Temas
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. IDs Identifican a qué transacción pertenece una versión de un documento y si se ha confirmado o anulado. Con el tiempo, estas versiones antiguas y su MVCC IDs se acumulan y 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 ID de MVCC: evita el desbordamiento de ID de MVCC mediante la gestión del contador finito de MVCC. IDs Sin esta administración, el contador eventualmente alcanzaría su límite, lo que obligaría a la base de datos a pasar a un modo temporal de solo lectura hasta que se recicle. IDs
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:
Identificación: el sistema identifica las versiones de documentos e índices a las que ya no hacen referencia las transacciones ni consultas activas.
Carga de memoria: los documentos antiguos y las entradas del índice se cargan en la memoria si aún no están presentes.
Eliminación: las versiones obsoletas se eliminan permanentemente para recuperar espacio de almacenamiento.
Reciclaje de identificadores de MVCC: el sistema recicla los MVCC de las versiones eliminadas para utilizarlos en IDs nuevas operaciones.
Cuando la recolección de basura termina de procesar las versiones antiguas de los documentos, elimina el MVCC IDs más antiguo del sistema. Esta limpieza es fundamental para evitar que los identificadores de los MVCC se desborden IDs, ya que reciclan los MVCC y los ponen 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 ampliado
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).
Información de estructura y metadatos del documento.
Índices principales y sus entradas.
Estadísticas y configuración a nivel de colección.
Segmento de almacenamiento extendido
El segmento de almacenamiento ampliado utiliza un almacén de objetos de documentos de gran tamaño especializado diseñado para gestionar documentos que superan el tamaño de página de almacenamiento estándar. Este segmento ofrece:
Gestión eficiente de documentos de gran tamaño: los documentos que superen el umbral de almacenamiento base se trasladan automáticamente al segmento de almacenamiento ampliado.
Diseño de almacenamiento optimizado: el segmento utiliza un formato de almacenamiento diferente, optimizado para objetos de gran tamaño, lo que reduce la fragmentación y mejora los patrones de acceso.
Recolección de basura independiente: el segmento de almacenamiento ampliado 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 ampliado es particularmente beneficioso para:
Colecciones con documentos que contienen matrices integradas de gran tamaño.
Documentos con amplias estructuras anidadas.
Colecciones que almacenan datos binarios o campos de texto de gran tamaño.
Aplicaciones con documentos de distintos tamaños, en las que algunos documentos superan considerablemente el tamaño medio.
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 desde 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 IDs se recupere y se recicle. El contador disminuye con cada operación de escritura y aumenta a medida que la recolección de basura recicla el MVCC antiguo. IDs
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
gcRuntimeStatshistóricos para identificar un comportamiento anormal en la recolección de basura, como los tiempos de ejecución prolongados 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
AvailableMVCCIdspara identificar las colecciones que contienen el MVCC más antiguo y IDs que están anticuadas en 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.
importante
gcRuntimeStatsdocumentFragmentStats, y el desglose de las métricas a nivel de recopilación en Amazon DocumentDB storageSegmentBase 8.0 y solo storageSegmentExtended están disponibles para Amazon DocumentDB 8.0.
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ándarstorageSegmentExtended— Almacenamiento utilizado por el segmento de almacenamiento ampliado para documentos de gran tamaño
Uso: ayuda a identificar las colecciones con un almacenamiento 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 tanto los totales combinados como los desgloses por segmento:
Combinados
unusedBytesy enunusedPercenttodos los segmentos de almacenamientostorageSegmentBase— Espacio no utilizado específicamente en el segmento de almacenamiento basestorageSegmentExtended— Espacio no utilizado específicamente en el segmento de almacenamiento ampliado
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 internas utilizadas por el motor de base de datos, y los fragmentos muertos 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óndeadDocFragmentsCount— Número de fragmentos que contienen datos muertos (inaccesibles)deadDocFragmentsPercent— Porcentaje de fragmentos que contienen datos muertosdeadDocFragmentBytes— Número estimado de bytes consumidos por fragmentos de documentos muertosDesglose por segmento para y
storageSegmentBasestorageSegmentExtended
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 altos porcentajes 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
reIndexpara 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:
Recolección excesiva:
unusedStorageSizelas métricas aumentan de forma constante durante las escrituras intensivas o las eliminaciones masivas, especialmente cuando se trata de índices de gran tamaño.Alto porcentaje de fragmentos muertos:
documentFragmentStatsmuestradeadDocFragmentsPercentvalores altos de forma constante (por encima del 10 al 15%).Latencia de consulta reducida: aumento de la latencia de consulta debido a la acumulación de documentos inactivos.
Duración extendida del GC: las operaciones de recolección de basura tardan más que los promedios históricos.
gcRuntimeStatsProcesamiento de GC elevado: un nivel alto
LongestActiveGCRuntimeindica 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:
Aumento de los costes de almacenamiento debido a la acumulación de documentos muertos.
El rendimiento de las consultas es más lento debido a las entradas de índice obsoletas.
Modo temporal de solo lectura si los MVCC IDs están agotados.
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 ampliado 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?
Recomendamos configurar la supervisión tanto a nivel de clúster como de colección para garantizar un rendimiento óptimo del sistema de 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 1300 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 fluctuar en función de tus patrones de uso específicos: algunos clientes ven que cae por debajo de los 1 300 millones y luego se recupera por encima de los 1500 millones a medida que la recolección de basura termina su función.
También es importante monitorear 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 el monitoreo a nivel de colección, concéntrate en estas métricas clave:
MVCCIdScale— Esté atento al aumento de los valores que sugieren que los MVCC IDs están envejeciendo y que podrían necesitar atención.gcRuntimeStats— Identifique los procesos de recolección de basura que demoran inusualmente o se prolongan durante varios días.documentFragmentStats— SupervisedeadDocFragmentsPercentlos valores: los porcentajes altos y constantes (superiores al 10-15%) pueden indicar un retraso en la recogida de basura.storageSizeStatsyunusedStorageSize— Realice un seguimiento de los patrones de uso 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. Le recomendamos que compruebe estas métricas con más frecuencia en las colecciones con mucha actividad de escritura para garantizar que la recopilación de elementos no utilizados 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 AvailableMVCCIds disminuye por debajo de los 1300 millones?
Si la métrica AvailableMVCCIds disminuye por debajo de los 1300 millones, le recomendamos que tome medidas inmediatas para evitar que el clúster entre en modo de solo lectura. Le recomendamos que primero amplíe el tamaño de la instancia para proporcionar más recursos informáticos al recopilador de elementos no utilizados. Esta es nuestra principal recomendación, ya que permite que su aplicación continúe con sus operaciones normales y, al mismo tiempo, le da al recolector de basura la potencia adicional que necesita para ponerse al día.
Si la ampliación por sí sola no mejora la situación, le recomendamos que considere reducir las operaciones de escritura. Utilice la MVCCIdScale métrica para identificar qué colecciones específicas contienen MVCC más antiguas y IDs que requieren atención. Además, supervise documentFragmentStats para identificar las colecciones con altos porcentajes de fragmentos muertos que puedan estar contribuyendo a la ineficiencia de la recolección de basura.
Una vez que haya identificado estas colecciones, es posible que tenga que reducir temporalmente las operaciones de escritura en ellas para permitir que la recopilación de elementos no utilizados se ponga al día. Durante el período de recuperación, le recomendamos que supervise atentamente la métrica AvailableMVCCIds para asegurarse de que sus 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.