Wie kann ich die Indizierungsleistung in meinem Amazon-OpenSearch-Service-Cluster verbessern?

Letzte Aktualisierung: 30.7.2021

Ich möchte die Indizierungsvorgänge in Amazon OpenSearch Service (Nachfolger von Amazon Elasticsearch Service) für maximalen Aufnahmendurchsatz optimieren. Wie kann ich vorgehen?

Auflösung

Stellen Sie sicher, dass die Shards gleichmäßig über die Datenknoten für den Index verteilt sind, in den Sie aufnehmen.

Verwenden Sie die folgende Formel, um zu bestätigen, dass die Shards gleichmäßig verteilt sind:

Number of shards for index = k * (number of data nodes), where k is the number of shards per node

Wenn der Index beispielsweise 24 Shards enthält und acht Datenknoten vorhanden sind, weist OpenSearch Service jedem Knoten drei Shards zu. Weitere Informationen finden Sie unter Erste Schritte mit Amazon OpenSearch Service: Wie viele Shards brauche ich?

Erhöhen des Aktualisierungsintervalls auf 60 Sekunden oder mehr

Aktualisieren Sie Ihren OpenSearch-Service-Index, um Ihre Dokumente für die Suche verfügbar zu machen. Beachten Sie, dass für die Aktualisierung Ihres Index dieselben Ressourcen erforderlich sind, die von Indizierungs-Threads verwendet werden.

Das standardmäßige Aktualisierungsintervall beträgt eine Sekunde. Wenn Sie das Aktualisierungsintervall erhöhen, führt der Datenknoten weniger API-Aufrufe durch. Das Aktualisierungsintervall kann kürzer oder schneller sein, je nach Länge. Um 429-Fehler zu vermeiden, empfiehlt es sich, das Aktualisierungsintervall zu erhöhen.

Hinweis: Das standardmäßige Aktualisierungsintervall beträgt 1 Sekunde für Indizes, die in den letzten 30 Sekunden eine oder mehrere Suchanfragen erhalten. Weitere Informationen zum aktualisierten Standardintervall finden Sie unter _refresh API Version 7.x auf der Elasticsearch-Website.

Ändern der Anzahl der Replikate auf Null

Wenn Sie mit einer starken Indizierung rechnen, sollten Sie den Wert index.number_of_replicas auf „0“ setzen. Jedes Replikat dupliziert den Indizierungsvorgang. Infolgedessen verbessert die Deaktivierung der Replikate die Leistung Ihres Clusters. Nachdem die umfangreiche Indizierung abgeschlossen ist, aktivieren Sie die replizierten Indizes erneut.

Wichtig: Wenn ein Knoten ausfällt, während Replikate deaktiviert werden, können Sie Daten verlieren. Deaktivieren Sie die Replikate nur, wenn Sie Datenverlust für eine kurze Dauer tolerieren können.

Experimentieren, um die optimale Größe für Massenanfragen herauszufinden

Beginnen Sie mit der Größe der Massenanforderung von 5 MiB bis 15 MiB. Erhöhen Sie dann langsam die Anforderungsgröße, bis sich die Indizierungsleistung nicht mehr verbessert. Weitere Informationen finden Sie unter Verwenden und Dimensionieren von Massenanforderungen auf der Elasticsearch-Website.

Hinweis: Einige Instance-Typen beschränken Massenanforderungen auf 10 MiB. Weitere Informationen finden Sie unter Netzwerkbeschränkungen.

Verwenden eines Instance-Typs mit SSD-Instance-Speicher-Volumes (wie I3)

I3-Instances bieten schnellen und lokalen Speicher-Express (NVMe)-Speicher. I3-Instances bieten eine bessere Aufnahmeleistung als Instances, die Allzweck-SSD (gp2) Amazon-Elastic-Block-Store (Amazon EBS)-Volumes verwenden. Weitere Informationen finden Sie unter Ausführung von Clustern in Petabytegröße in Amazon Elasticsearch Service mithilfe von I3-Instances.

Reduzieren der Reaktionsgröße

Um die Größe der Reaktion von OpenSearch Service zu reduzieren, verwenden Sie den Parameter filter_path, um unnötige Felder auszuschließen. Stellen Sie sicher, dass Sie keine Felder herausfiltern, die erforderlich sind, um fehlgeschlagene Anfragen zu identifizieren oder erneut zu versuchen. Diese Felder können je nach Client variieren.

Im folgenden Beispiel werden die Felder index-name, type-name und took von der Antwort ausgeschlossen:

curl -X POST "es-endpoint/index-name/type-name/_bulk?pretty&filter_path=-took,-items.index._index,-items.index._type" -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "test2", "_id" : "1" } }
{ "user" : "testuser" }
{ "update" : {"_id" : "1", "_index" : "test2"} }
{ "doc" : {"user" : "example"} }

Weitere Informationen finden Sie unter Reduzieren der Reaktionsgröße.

Erhöhen des Werts von index.translog.flush_threshold_size

Standardmäßig ist index.translog.flush_threshold_size auf 512 MB eingestellt. Dies bedeutet, dass das Translog geleert wird, wenn er 512 MB erreicht. Das Gewicht der Indizierungslast bestimmt die Frequenz des Translogs. Wenn Sie index.translog.flush_threshold_size erhöhen, führt der Knoten die Translog-Operation seltener aus. Da OpenSearch-Service-Entleerungen ressourcenintensive Vorgänge sind, verbessert die Reduzierung der Häufigkeit von Translogs die Indizierungsleistung. Durch die Erhöhung der Größe des Entleerungsschwellenwerts erstellt der OpenSearch-Service-Cluster auch weniger große Segmente (anstelle mehrerer kleiner Segmente). Große Segmente verschmelzen seltener, und mehr Threads werden für die Indizierung anstelle des Zusammenführens verwendet.

Hinweis: Eine Erhöhung von index.translog.flush_threshold_size kann auch die Zeit verlängern, die für den Abschluss eines Translogs benötigt wird. Wenn ein Shard ausfällt, dauert die Wiederherstellung länger, da der Translog größer ist.

Bevor Sie index.translog.flush_threshold_size erhöhen, rufen Sie den folgenden API-Vorgang auf, um aktuelle Flush-Operationsstatistiken abzurufen:

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Ersetzen Sie den os-endpoint und den index-name durch Ihre jeweiligen Variablen.

Notieren Sie in der Ausgabe die Anzahl der Entleerungen und die Gesamtzeit. Die folgende Beispielausgabe zeigt, dass es 124 Entleerungen gibt, was 17 690 Millisekunden dauerte:

"flush" { "total" : 124, "total_time_in_millis" : 17690 }

Um die Größe des Entleerungsschwellenwerts zu erhöhen, rufen Sie den folgenden API-Vorgang auf:

$ curl -XPUT 'os-endpoint/index-name/_settings?pretty' -d '{"index":{"translog.flush_threshold_size" : "1024MB"}}'

In diesem Beispiel ist die Größe des Entleerungsschwellenwerts auf 1 024 MB festgelegt, was ideal für Instanzen mit mehr als 32 GB Speicher ist.

Hinweis: Wählen Sie die entsprechende Schwellenwertgröße für Ihre OpenSearch Service-Domäne.

Führen Sie den API-Vorgang _stats erneut aus, um festzustellen, ob sich die Entleerungsaktivität geändert hat:

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Hinweis: Es ist eine bewährte Methode, den index.translog.flush_threshold_size nur für den aktuellen Index zu erhöhen. Nachdem Sie das Ergebnis bestätigt haben, wenden Sie die Änderungen auf die Indexvorlage an.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?