Warum ist die Metrik für gelöschte Dokumente in meinem Amazon-OpenSearch-Service-Cluster so hoch?

Letzte Aktualisierung: 13.01.2023

Ich habe Dokumente in meinem Amazon OpenSearch Service-Cluster gelöscht, aber es wird kein Festplattenspeicher zurückgewonnen.

Kurzbeschreibung

In OpenSearch Service ist die Metrik DeletedDocuments ein Zähler, der die Anzahl der Dokumente anzeigt, die zum Löschen markiert sind. Die Metrik DeletedDocuments zeigt einen Anstieg nach der Verarbeitung der Löschanfragen und einen Rückgang, nachdem die Indexsegmente innerhalb Ihres Clusters zusammengeführt wurden.

OpenSearch Service führt die Operation merge API automatisch aus und verwendet dabei die Einstellung für die Zusammenführungsrichtlinie. Während einer Zusammenführung werden die kleineren Segmente zu größeren Segmenten zusammengeführt, um die Indexgröße beizubehalten. Zum Löschen markierte Dokumente werden ebenfalls endgültig gelöscht, um zusätzlichen Speicherplatz freizugeben.

Um sofort Speicherplatz zurückzugewinnen, können Sie einen Index löschen, anstatt einzelne Dokumente zu löschen. Oder Sie können die force merge API zusammen mit dem Parameter only_expunge_deletes verwenden, um die gelöschten Dokumente innerhalb eines Index zu löschen.

Gehen Sie wie folgt vor, um Index-Metadaten bei der Rückgewinnung von Festplattenspeicher in Ihrem Cluster beizubehalten:

Lösung

Überprüfen Sie die Anzahl der gelöschten Dokumente

Um die Anzahl der gelöschten Dokumente in Ihrem OpenSearch-Service-Cluster zu überprüfen, führen Sie die cluster stats API aus. Der vom Aufruf der cluster stats API erhaltene Wert wird in der Metrik DeletedDocuments für Ihren Cluster angezeigt. Die Ausgabe gibt eine Summe der gelöschten Dokumente für alle in Ihrem Cluster vorhandenen Indizes zurück. Sie können diese Anzahl mithilfe des Felds „docs.deleted“ in der Antwortausgabe überprüfen.

Wenn Ihr Cluster beispielsweise drei Indizes hat (index1, index2 und index3), führen Sie den API-Aufruf für Indexstatistiken aus:

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

Der Aufruf der Cluster-Statistik-API fügt dann das Feld „docs.deleted“ für alle Indizes hinzu, die in Ihrem Cluster vorhanden sind:

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

Wenn Sie index2 löschen, berechnet der Cluster-Statistik-API-Aufruf nur die Werte für index1 und index3:

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

Die Segmente sind jetzt zusammengeführt und die Index-Metadaten für index2 werden gelöscht. Infolgedessen sinkt der Metrikwert für DeletedDocuments auf 9.

Bestätigen Sie die Größe der Dokumente

Verwenden Sie die cat indices API, um die Größe und Anzahl der Dokumente für einen Index zu überprüfen. Achten Sie darauf, dass das neue Dokument dieselbe Größe wie das vorhandene Dokument in Ihrem OpenSearch-Service-Cluster hat. Durch die Verwendung derselben Dokumentgröße wird sichergestellt, dass gelöschte Dokumente keinen zusätzlichen Speicherplatz belegen.

Löschen Sie die gelöschten Dokumente endgültig

Um Speicherplatz manuell zurückzugewinnen, führen Sie die force merge-API mit dem Parameter only_expunge_deletes aus und setzen Sie diesen auf „true“:

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

Hinweis: Bei diesem Vorgang werden nur die Segmente gelöscht, die Dokumente enthalten, die zum Löschen markiert sind.

Infolgedessen verringert force merge die Menge des belegten Festplattenspeichers. Nachdem die neuen Segmente erstellt wurden, werden alte Segmente entfernt und die neuen Segmente enthalten die zum Löschen markierten Dokumente nicht mehr. Weitere Informationen zu gelöschten Dokumenten finden Sie unter Verarbeitung gelöschter Dokumente durch Lucene auf der Elasticsearch-Website.

Beachten Sie Folgendes, wenn Sie die Operation force merge durchführen:

  • Führen Sie einen force merge auf Ihrem Cluster nur durch, wenn genügend freier Speicherplatz vorhanden ist. Diese Aktion benötigt sehr viele Ressourcen.
  • Die Operation force merge löst einen I/O-intensiven Prozess aus und blockiert alle neuen Anforderungen an Ihren Cluster, bis die Zusammenführung abgeschlossen ist.
  • Rufen Sie die Force Merge-Operation nur für schreibgeschützte Indizes auf, wenn keine zusätzlichen Daten in den Index geschrieben werden. Das Aufrufen von Force Merge für einen Lese-/Schreibindex kann dazu führen, dass sehr große Segmente erzeugt werden (> 5 GB pro Segment). In diesem Fall berücksichtigt die automatische Zusammenführungsrichtlinie diese sehr großen Segmente bei zukünftigen Zusammenführungen erst, wenn die Segmente größtenteils gelöschte Dokumente enthalten. Infolgedessen steigt die Festplattennutzung und die Suchleistung verschlechtert sich.

Sie können auch die delete by query API oder die delete API verwenden, um Dokumente in Ihrem Cluster manuell zu löschen.

Sofortige Zurückgewinnung von Speicherplatz

Verwenden Sie die delete index API, um Speicherplatz sofort zurückzugewinnen. Durch das Löschen eines Indexes werden keine Löschmarkierungen erstellt. Stattdessen löscht die delete index API die Index-Metadaten und der Speicherplatz wird sofort zurückgewonnen. Der zurückgewonnene Festplattenspeicher wird in der Metrik DeletedDocuments wiedergegeben.

Hinweis: Es empfiehlt sich, alte Indizes zu löschen, die nicht verwendet werden. Wenn Sie einen aktiven Index löschen, blockieren Sie unbedingt die automatische Erstellung von Indizes. Weitere Informationen finden Sie unter Automatisches Erstellen von Datenströmen und Indizes auf der Elasticsearch-Website.