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

Dernière mise à jour : 30/09/2021

J'ai supprimé des documents dans mon cluster Amazon OpenSearch Service (qui a succédé à Amazon Elasticsearch Service), mais aucun espace disque n'est récupéré. Comment puis-je libérer plus d'espace disque ?

Brève description

Dans OpenSearch Service, la métrique DocumentsSupprimés est un compteur qui indique le nombre de documents marqués pour suppression. La mesure DocumentsSupprimés affiche une augmentation après le traitement des demandes de suppression et la fusion des segments d'index dans votre cluster.

OpenSearch Service exécute automatiquement l'opération de fusion d'API à l'aide du paramètre de politique de fusion. Lors d'une fusion, les plus petits segments sont fusionnés en segments plus grands pour maintenir la taille de l'index. Les documents marqués pour suppression sont également supprimés pour libérer de l'espace disque supplémentaire.

Pour récupérer immédiatement de l'espace disque, vous pouvez supprimer un index plutôt que des documents individuels. Vous pouvez également utiliser l'API de fusion forcée avec le paramètre only_expunge_deletes pour effacer les documents supprimés d'un index.

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

Résolution

Vérifier le nombre de documents supprimés

Pour vérifier le nombre de documents supprimés dans votre cluster OpenSearch Service, 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 DocumentsSupprimés de votre cluster. La sortie renvoie une somme des documents supprimés pour tous les index présents dans votre cluster. Ce nombre peut être vérifié en utilisant le champ « docs.deleted » de la réponse.

Par exemple, si votre cluster a trois index (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 ajoute ensuite le champ « docs.deleted » pour tous les index présents dans votre cluster :

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

Si vous supprimez l'index2, l'appel d'API de statistiques du cluster ne calcule que les valeurs de l'index1 et de l'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.

Vérifier la taille de vos documents

Pour vérifier les tailles et le nombre de documents d'un index, utilisez l'API des index cat. Assurez-vous que le nouveau document a la même taille que le document existant dans votre cluster OpenSearch Service. L'utilisation d'un document de même taille garantit que les documents supprimés n'occupent pas d'espace disque supplémentaire.

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 « true » :

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

Remarque : cette opération ne supprime que les segments contenant des documents marqués pour suppression.

Par conséquent, la fusion forcée diminue la quantité d'espace disque utilisée. Une fois les nouveaux segments créés, les anciens segments sont supprimés et les nouveaux segments ne contiennent plus les documents marqués pour suppression. Pour plus d'informations sur les documents supprimés, consultez Traitement des documents supprimés par Lucene sur le site Web Elasticsearch.

Toutefois, tenez compte des éléments suivants lors de l'exécution d'une opération de fusion forcée :

  • Effectuez une fusion forcée sur votre cluster uniquement lorsqu'il y a suffisamment d'espace de stockage disponible. Cette action est une opération gourmande 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 à votre cluster jusqu'à la fin de la fusion.
  • N’appelez l'opération de fusion forcée que sur des index en lecture seule, quand aucune donnée supplémentaire n'est écrite dans l'index. Si la fusion forcée est appelée sur un index en lecture/écriture, l'action peut entraîner la production de très grands segments (>5 Go par segment). Lorsque c’est le cas, la stratégie de fusion automatique ne prend pas en compte ces très grands segments pour les futures fusions tant que les segments ne contiennent pas essentiellement des documents supprimés. Par conséquent, l'utilisation du disque augmente et les performances de recherche se détériorent.

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.

Récupérer immédiatement de l'espace disque

Pour récupérer immédiatement de l'espace disque, utilisez l'API de suppression d'index. La suppression d'un index ne crée aucun marqueur de suppression. Au lieu de cela, l'API de suppression d'index efface les métadonnées d'index et l'espace disque est immédiatement récupéré. L'espace disque récupéré est reflété dans la métrique DeletedDocuments.

Remarque : il est de bonne pratique de supprimer les anciens index inutilisé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.