Pourquoi la métrique Documents supprimés est-elle si élevée dans mon cluster Amazon Elasticsearch Service?

Dernière mise à jour : 14/07/2020

J'ai supprimé des documents dans mon cluster Amazon Elasticsearch Service (Amazon ES), mais je ne vois aucun espace disque récupéré. Comment libérer plus d'espace disque ?

Brève description

Dans Amazon ES, la métrique DeletedDocuments est un compteur qui indique le nombre de documents marqués pour suppression. La métrique affiche une augmentation après le traitement des demandes de suppression et la fusion des segments d'index au sein de votre cluster Elasticsearch.

Lors d'un nettoyage de routine, Amazon ES exécute automatiquement l'opération de fusion forcée. Lors d'une fusion forcée, les segments existants sont fusionnés dans un nouveau segment, et les segments existants sont également écrits par les nouvelles demandes. Bien que la fusion forcée n'efface aucun document supprimé, l'action économise de l'espace disque en réduisant le nombre de segments d'index dans votre cluster Elasticsearch.

Pour conserver les métadonnées d'index tout en récupérant de l'espace disque dans votre cluster Elasticsearch, envisagez les approches suivantes :

Pour récupérer immédiatement de l'espace disque, vous pouvez également supprimer un index au lieu de supprimer des documents individuels. La suppression d'un index ne crée aucun marqueur de suppression. Par conséquent, l'espace disque est immédiatement récupéré.

Résolution

Vérifier le nombre de documents supprimés

Pour vérifier le nombre de documents supprimés dans votre cluster Elasticsearch, exécutez l' API de statistiques du cluster. La valeur obtenue à partir de l'appel d'API de statistiques du cluster s'affiche dans la métrique DeletedDocuments de votre cluster Elasticsearch.

La sortie renvoie une somme des documents supprimés pour tous les indexes présents dans le cluster Elasticsearch. Ce nombre peut être vérifié en utilisant le champ « docs.deleted » dans la sortie de la réponse.

Par exemple, si votre cluster possède trois indexes (index1, index2 et index3), vous pouvez exécuter l'appel d'API de statistiques d'index:

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

L'appel d'API de statistiques du cluster ajouterai alors le champ « docs.deleted » pour tous les indexes présents dans votre cluster Elasticsearch :

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

Si vous supprimez index2, l'appel d'API de statistiques du cluster calcule uniquement les valeurs pour index1 et index3 :

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

Les segments sont maintenant fusionnés et les métadonnées d'index pour index2 sont effacées. Par conséquent, la valeur de la métrique DeletedDocuments est passée à 9.

Confirmez la taille de vos documents.

Pour vérifier les tailles et le nombre de documents pour un index, utilisez l' cat indices API. Assurez-vous que le nouveau document ait la même taille que le document existant dans votre cluster Elasticsearch. L'utilisation de la même taille de document garantit que les documents supprimés n'occupent pas d'espace disque supplémentaire. Au lieu de cela, Amazon ES travaille en arrière-plan pour libérer de l'espace disque, en fusionnant les segments et en supprimant automatiquement tous les documents supprimés.

Effacer les documents supprimés

Pour récupérer manuellement de l'espace disque, exécutez l' API de fusion forcée avec le paramètre only_expunge_deletes défini sur « vrai » :

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

Lorsque vous exécutez une fusion forcée, les anciens segments sont fusionnés en de nouveaux segments et Amazon ES efface automatiquement tous les documents supprimés. Par conséquent, la fusion forcée réduit la quantité d'espace disque utilisée. Une fois les nouveaux segments créés, les anciens segments sont supprimés. Pour plus d'informations, consultez Traitement des documents supprimés par Lucene sur le site web Elasticsearch.

Réduisez le nombre de documents dans votre cluster Elasticsearch.

Pour réduire le nombre de documents dans votre cluster Elasticsearch (sans désactiver les opérations d'écriture), utilisez la fusion forcée seule. Cependant, soyez conscient des points suivants :

  • Effectuez une fusion forcée sur votre cluster Elasticsearch uniquement lorsqu'il y a suffisamment d'espace de stockage disponible. L'action est une opération intense en ressources.
  • L'opération de fusion forcée déclenche un processus intensif d'I/O et bloque toutes les nouvelles demandes adressées au cluster jusqu'à ce que la fusion soit terminée.
  • L'opération de fusion forcée doit être appelée uniquement par rapport aux index en lecture seule, lorsqu'aucune donnée supplémentaire n'est écrite sur l'index. Si la fusion forcée est appelée sur un index de lecture/écriture, l'action peut entraîner la production de segments très larges (> 5 Go par segment). Ensuite, la stratégie de fusion automatique ne prend pas en compte ces segments pour les futures fusions tant que les segments ne sont pas constitués principalement de documents supprimés. Par conséquent, l'utilisation du disque est augmentée et les performances de recherche s'aggravent.

Vous pouvez également utiliser l' API de suppression par requête ou l'API de suppression pour supprimer manuellement tous les documents de votre cluster Elasticsearch.

Récupérez immédiatement de l'espace disque.

Pour récupérer immédiatement de l'espace disque, utilisez l' API de suppression d'index. Cela supprime un index existant et permet de libérer de l'espace disque.

Remarque : il est de bonne pratique de supprimer les anciens index qui ne sont pas utilisés. Si vous supprimez un index actif, veillez à bloquer la création automatique d'index. Pour plus d'informations, consultez Créer des index automatiquement sur le site web Elasticsearch.