¿Por qué la métrica de documentos eliminados es tan alta en el clúster de Amazon OpenSearch Service?

Última actualización: 13/01/2023

He eliminado documentos de mi clúster de Amazon OpenSearch Service, pero no veo ningún espacio en disco recuperado.

Descripción breve

En OpenSearch Service, la métrica DeletedDocuments es un contador que muestra la cantidad de documentos que están marcados para su eliminación. La métricaDeletedDocuments muestra un aumento una vez que se procesan las solicitudes de eliminación y disminuye una vez que los segmentos del índice se fusionan en el clúster.

OpenSearch Service ejecuta automáticamente la operación de la API de combinación mediante la configuración de la política de combinación. Durante una combinación, los segmentos más pequeños se fusionan en segmentos más grandes para mantener el tamaño del índice. Los documentos marcados para su eliminación también se borran para liberar espacio en disco adicional.

Para recuperar espacio en disco inmediatamente, puede eliminar un índice en lugar de eliminar documentos individuales. O bien, también puede utilizar la API force merge junto con el parámetro only_expunge_deletes para limpiar los documentos eliminados de un índice.

Para mantener los metadatos del índice mientras recupera espacio en disco en el clúster, considere los siguientes métodos:

Resolución

Verificar el número de documentos eliminados

Para verificar el número de documentos eliminados del clúster de OpenSearch Service, ejecute la API cluster stats. El valor obtenido de la llamada a la API cluster stats aparece en la métrica DeletedDocuments de su clúster. El resultado devuelve una suma de los documentos eliminados de todos los índices presentes en el clúster. Puede comprobar este recuento utilizando el campo «docs.deleted» del resultado de la respuesta.

Por ejemplo, si tu clúster tiene tres índices (index1, index2 e index3), ejecuta la llamada a la API de estadísticas de índices:

GET index1/_stats
...
"docs": {
     "count": 100,
     "deleted": 1
}
... 
GET index2/_stats
...
"docs": {
     "count": 100,
     "deleted": 5
}
...
GET index3/_stats
...
"docs": {
     "count": 100,
     "deleted": 8
}
...

A continuación, la llamada a la API de estadísticas del clúster añade el campo «docs.deleted» para todos los índices presentes en tu clúster:

...
"docs": {
     "count": 1227677521,
     "deleted": 14
}
...

Si eliminas index2, la llamada a la API de estadísticas del clúster calcula los valores solo para index1 e index3:

GET _cluster/stats
...
"docs": {
     "count": 1227677521,
     "deleted": 9
}

Los segmentos ahora se fusionan y los metadatos del índice de index2 se borran. Como resultado, el valor de la métrica DeletedDocuments disminuyó a 9.

Confirmar el tamaño de los documentos

Para verificar el tamaño de los documentos y el recuento de un índice, utilice la API cat indices. Asegúrese de que el nuevo documento tenga el mismo tamaño que el documento existente en el clúster de OpenSearch Service. El uso del mismo tamaño de documento garantiza que los documentos eliminados no ocupen espacio de disco adicional.

Borrar los documentos eliminados

Para recuperar espacio en disco de forma manual, ejecute la API force merge junto con el parámetro only_expunge_deletes establecido como “verdadero”:

POST /<index-name>/_forcemerge?only_expunge_deletes=true

Nota: Esta operación solo borrará los segmentos que contengan documentos marcados para su eliminación.

Como resultado, force merge reduce la cantidad de espacio en disco que se utiliza. Una vez creados los segmentos nuevos, se quitan los antiguos y los nuevos ya no contienen los documentos marcados para su eliminación. Para obtener más información sobre los documentos eliminados, consulte Gestión de Lucene de los documentos eliminados en el sitio web de Elasticsearch.

Sin embargo, tenga en cuenta lo siguiente al realizar la operación de force merge:

  • Ejecute force merge en el clúster solo cuando haya suficiente espacio de almacenamiento libre. Esta acción es una operación que consume muchos recursos.
  • La operación de force merge desencadena un proceso intensivo de I/O y bloquea todas las solicitudes nuevas al clúster hasta que se complete la combinación.
  • Ejecute la operación de fusión forzada únicamente con índices de solo lectura cuando no se escriban datos adicionales en el índice. La combinación forzada de llamadas con un índice de lectura/escritura puede provocar la producción de segmentos muy grandes (más de 5 GB por segmento). Cuando esto ocurre, la política de combinación automática no tiene en cuenta estos segmentos muy grandes para futuras fusiones hasta que los segmentos contengan en su mayoría documentos eliminados. Como resultado, el uso del disco aumenta y el rendimiento de las búsquedas empeora.

También puede utilizar la API delete by query o la API delete para eliminar de forma manual cualquier documento de su clúster.

Recuperar espacio en disco de inmediato

Para recuperar espacio en disco de inmediato, utilice la API delete index. Eliminar un índice no crea marcadores de eliminación. En su lugar, la API delete index borra los metadatos del índice y el espacio en disco se recupera de inmediato. El espacio en disco recuperado se refleja en la métrica DeletedDocuments.

Nota: Es una práctica recomendada eliminar los índices antiguos que no se utilicen. Si elimina un índice activo, asegúrese de bloquear la creación automática de índices. Para obtener más información, consulta Crear automáticamente secuencia de datos e índices en el sitio web de Elasticsearch.