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

Letzte Aktualisierung: 30.9.2021

Ich habe Dokumente in meinem Amazon-OpenSearch-Service-Cluster (Nachfolger des Amazon Elasticsearch Service) gelöscht, aber ich sehe nicht, dass Festplattenspeicher freigegeben wurde. Wie gebe ich mehr Speicherplatz frei?

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, nachdem die Löschanforderungen verarbeitet und die Indexsegmente in Ihrem Cluster 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:

Behebung

Ü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. Der Ausgabewert ist die Summe aller gelöschten Dokumente für alle in Ihrem Cluster vorhandenen Indizes. Diese Anzahl kann über das Feld „docs.deleted“ in der Antwortausgabe überprüft werden.

Wenn Ihr Cluster beispielsweise über drei Indizes verfügt (index1, index2 und index3), können Sie den index stats-API-Aufruf ausführen:

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 stats-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 Aufruf der cluster stats API nur die Werte für index1 und index3:

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

Die Segmente werden jetzt zusammengeführt und die Indexmetadaten 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 Operation force merge nur für schreibgeschützte Indizes auf, wenn keine zusätzlichen Daten in den Index geschrieben werden. Wenn force merge für einen Lese-/Schreibindex aufgerufen wird, kann diese Aktion dazu führen, dass sehr große Segmente erzeugt werden (> 5 GB pro Segment). Wenn dies geschieht, berücksichtigt die Richtlinie für die automatische Zusammenführung diese sehr großen Segmente nicht für zukünftige Zusammenführungen, bis 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 Indizes auf der Elasticsearch-Website.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?