Direkt zum Inhalt

Wie kann ich die Indizierungsleistung des OpenSearch-Service-Clusters verbessern?

Lesedauer: 5 Minute
0

Ich möchte Indizierungsvorgänge in Amazon OpenSearch Service für einen maximalen Erfassungsdurchsatz optimieren.

Kurzbeschreibung

Gehe wie folgt vor, um die Indizierungsleistung des OpenSearch-Service-Clusters zu verbessern:

  • Verteile Shards gleichmäßig über die Datenknoten für den Index, in den du Daten einfügst.
  • Erhöhe das Aktualisierungsintervall auf 60 Sekunden oder länger.
  • Ändere die Replikatanzahl in null.
  • Experimentiere, um die optimale Größe für Bulk-Anforderungen zu finden.
  • Verwende einen Instance-Typ mit SSD-Instance-Speicher-Volumes, wie z. B. I3.
  • Reduziere die Antwortgröße.
  • Erhöhe die Größe des Flush-Schwellenwerts.

Lösung

Shards gleichmäßig über die Datenknoten für den Index verteilen, in den du Daten einfügst

Standardmäßig verteilt OpenSearch Service Shards basierend auf der Shard-Anzahl, nicht auf der Shard-Größe. Verwende die folgende Formel, um zu ermitteln, wie OpenSearch Service Shards verteilt:

Anzahl der Shards pro Knoten = Anzahl der Shards für den Index / Anzahl der Datenknoten

Wenn beispielsweise 24 Shards im Index vorhanden sind und es 8 Datenknoten gibt, weist OpenSearch Service jedem Knoten 3 Shards zu.

Um eine gleichmäßige Verteilung zu erstellen, verwende sowohl die Shard-Größe als auch die Shard-Anzahl. Weitere Informationen findest du unter Get started with Amazon OpenSearch Service: How many shards do I need? (Erste Schritte mit Amazon OpenSearch Service: Wie viele Shards benötige ich?)

Das Aktualisierungsintervall auf 60 Sekunden oder länger erhöhen

Die Aktualisierung des OpenSearch-Service-Index ermöglicht es der Suche, deine Dokumente zu finden. Wenn du den Index aktualisierst, verwendet OpenSearch Service dieselben Ressourcen, die zum Indizieren von Threads verwendet wurden.

Das standardmäßige Aktualisierungsintervall beträgt 1 Sekunde. Wenn du das Aktualisierungsintervall erhöhst, führt der Datenknoten weniger API-Aufrufe aus. Um 429-Fehler zu vermeiden, ist es eine bewährte Methode, 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 haben. Weitere Informationen über das aktualisierte Standardintervall findest du auf der Elasticsearch-Website unter Refresh API.

Die Replikatanzahl in null ändern

Wenn du eine umfangreiche Indizierung erwartest, lege den Wert für index.number_of_replicas auf 0 fest. Jedes Replikat dupliziert den Indizierungsprozess. Wenn du Replikate deaktivierst, verbesserst du die Leistung des Clusters. Nachdem die umfangreiche Indizierung abgeschlossen ist, aktiviere die replizierten Indizes erneut.

Wichtig: Wenn ein Knoten ausfällt, während Replikate deaktiviert sind, können Daten verloren gehen. Deaktiviere Replikate nur, wenn du einen Datenverlust für kurze Zeit tolerieren kannst.

Experimentieren, um die optimale Größe für Bulk-Anforderungen zu finden

Beginne mit einer Bulk-Anforderungsgröße von 5 MiB bis 15 MiB. Erhöhe dann die Anforderungsgröße langsam, bis sich die Indizierungsleistung nicht mehr verbessert. Weitere Informationen findest du auf der Elastic-Website unter Using and sizing bulk requests.

Hinweis: Einige Instance-Typen begrenzen Bulk-Anforderungen auf 10 MiB. Weitere Informationen findest du unter Network quotas (Netzwerkkontingente).

Einen Instance-Typ mit SSD-Instance-Speicher-Volumes verwenden

I3-Instances bieten schnellen und lokalen Memory Express (NVMe)-Speicher. I3-Instances haben eine bessere Erfassungsleistung als Instances, die General Purpose SSD (gp2) Amazon Elastic Block Store (Amazon EBS)-Volumes verwenden. Weitere Informationen findest du unter Petabyte scale in Amazon OpenSearch Service (Petabyte-Skalierung in Amazon OpenSearch Service).

Antwortgröße reduzieren

Um die Größe der Antworten von OpenSearch Service zu reduzieren, verwende den Parameter filter_path zum Ausschließen unnötiger Felder.

Wichtig: Filtere keine Felder heraus, die du beim Identifizieren oder Wiederholen fehlgeschlagener Anforderungen benötigst. Diese Felder können je nach Client unterschiedlich sein.

Im folgenden Beispiel schließt die Antwort die Felder index-name, type-name und took aus:

curl -XPOST "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 findest du unter Reducing response size (Reduzieren der Antwortgröße).

Größe des Flush-Schwellenwerts erhöhen

Standardmäßig ist index.translog.flush_threshold_size auf 512 MB festgelegt. Dies bedeutet, dass OpenSearch Service das Translog leert, wenn es 512 MB erreicht. Weitere Informationen findest du auf der Elasticsearch-Website unter Translog. Das Gewicht der Indizierungslast bestimmt die Häufigkeit des Translogs. Wenn du index.translog.flush_threshold_size erhöhst, führt der Knoten die Translog-Operation seltener durch. Da OpenSearch-Service-Flushes ressourcenintensive Vorgänge sind, verbesserst du die Indizierungsleistung, wenn du die Häufigkeit von Translogs reduzierst.

Wenn du die Größe des Flush-Schwellenwerts erhöhst, erstellt der OpenSearch-Service-Cluster außerdem einige wenige große Segmente anstelle von mehreren kleinen Segmenten. Große Segmente werden seltener zusammengeführt und verwenden mehr Threads für die Indizierung statt für das Zusammenführen.

Hinweis: Das Erhöhen von index.translog.flush_threshold_size kann auch zu einer Erhöhung der Dauer führen, die zum Abschließen eines Translog benötigt wird. Wenn ein Shard ausfällt, dauert die Wiederherstellung länger, da das Translog größer ist.

Bevor du index.translog.flush_threshold_size erhöhst, rufe die aktuellen Flush-Operationsstatistiken ab. Führe die folgende API-Operation aus:

curl -XPOST "os-endpoint/index-name/_stats/flush?pretty"

Hinweis: Ersetze os-endpoint durch deinen OpenSearch Service-Endpunkt und index-name durch deinen Index.

Überprüfe in der Ausgabe die Anzahl der Flushes und die Gesamtzeit. Die folgende Beispielausgabe zeigt, dass 124 Flushes erfolgt sind, die 17.690 Millisekunden gedauert haben:

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

Um die Größe des Flush-Schwellenwerts zu erhöhen, führe die folgende API-Operation aus:

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

Hinweis: Ersetze os-endpoint durch deinen OpenSearch Service-Endpunkt und index-name durch deinen Index. Außerdem beträgt die Größe des Flush-Schwellenwerts in der vorherigen Operation 1024 MB. Es ist eine bewährte Methode, diese Größe für Instances mit mehr als 32 GB Speicher zu verwenden. Ersetze 1024 durch die richtige Schwellenwertgröße für deine OpenSearch-Service-Domäne.

Um zu überprüfen, ob die Flush-Aktivität aktualisiert wurde, führe die _stats-API-Operation aus:

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

Hinweis: Ersetze os-endpoint durch deinen OpenSearch Service-Endpunkt und index-name durch deinen Index.

Es ist eine bewährte Methode, die index.translog.flush_threshold_size nur für den aktuellen Index zu erhöhen. Nachdem du das Ergebnis geprüft hast, wende die Änderungen auf die Indexvorlage an.

Weitere Informationen

Operational best practices for Amazon OpenSearch Service (Bewährte Methoden für den Betrieb von Amazon OpenSearch Service)

AWS OFFICIALAktualisiert vor 2 Jahren