Passer au contenu

Comment améliorer les performances d'indexation sur mon cluster Amazon OpenSearch Service ?

Lecture de 6 minute(s)
0

Je souhaite optimiser les opérations d'indexation dans Amazon OpenSearch Service pour un débit d'ingestion maximal.

Brève description

Pour améliorer les performances d'indexation sur votre cluster OpenSearch Service, procédez comme suit :

  • Répartissez les fragments de manière uniforme sur les nœuds de données de l'index dans lequel vous les ingérez.
  • Augmentez l'intervalle d’actualisation à 60 secondes ou plus.
  • Modifiez le nombre de réplicas à zéro.
  • Effectuez des essais pour trouver la taille optimale de requête groupée.
  • Utilisez un type d'instance avec des volumes de stockage d'instances SSD, tels que I3.
  • Réduisez la taille de la réponse.
  • Augmentez la taille du seuil de vidage.

Résolution

Répartir les partitions de manière uniforme sur les nœuds de données de l'index dans lequel vous les ingérez

Par défaut, OpenSearch Service distribue les partitions en fonction de leur nombre, et non de leur taille. Utilisez la formule suivante pour comprendre comment OpenSearch Service distribue les partitions :

Le nombre de partitions par nœud = le nombre de partitions pour l'index/le nombre de nœuds de données

Par exemple, si l’index contient 24 partitions et huit nœuds de données, OpenSearch Service attribue trois partitions à chaque nœud.

Pour créer une distribution équivalente, utilisez à la fois la taille et le nombre de partitions. Pour plus d'informations, consultez la section Démarrer avec Amazon OpenSearch Service : De combien de partitions ai-je besoin ?

Augmenter l'intervalle d’actualisation à 60 secondes ou plus

L'actualisation de votre index OpenSearch Service permet de rechercher vos documents. Lorsque vous actualisez l'index, OpenSearch Service utilise les mêmes ressources que celles utilisées pour indexer les threads.

L'intervalle d’actualisation par défaut est d'une seconde. Lorsque vous augmentez l'intervalle d'actualisation, le nœud de données effectue moins d'appels d'API. Pour éviter 429 erreurs, il est recommandé d'augmenter l'intervalle d’actualisation.

Remarque : L'intervalle d'actualisation par défaut est d'une seconde pour les index qui ont reçu une ou plusieurs demandes de recherche au cours des 30 dernières secondes. Pour plus d'informations sur l'intervalle par défaut mis à jour, consultez la page API d’actualisation sur le site Web d'Elasticsearch.

Remplacer le nombre de réplicas à zéro

Si vous prévoyez une indexation importante, définissez la valeur index.number_of_replicas sur 0. Chaque réplica reproduit le processus d'indexation. Lorsque vous désactivez les réplicas, vous améliorez les performances de votre cluster. Une fois l'indexation lourde terminée, réactivez les index répliqués.

Important : Si un nœud est défaillant alors que les réplicas sont désactivés, vous pouvez perdre des données. Désactivez les réplicas uniquement si vous pouvez tolérer une perte de données pendant une courte durée.

Effectuer des essais pour trouver la taille optimale de requête groupée

Commencez par une taille de requête groupée comprise entre 5 Mo et 15 Mo. Augmentez ensuite lentement la taille de la requête jusqu'à ce que les performances d'indexation cessent de s'améliorer. Pour plus d'informations, consultez la page Utilisation et dimensionnement des requêtes groupées sur le site Web d'Elasticsearch.

Remarque : Certains types d'instances limitent les requêtes groupées à 10 Mio. Pour plus d’informations, consultez la section Quotas de réseau.

Utiliser un type d'instance qui comporte des volumes de stockage d'instances SSD

Les instances I3 fournissent un stockage rapide et local en mémoire express (NVMe). Les instances I3 offrent de meilleures performances d'ingestion que les instances qui utilisent des volumes Amazon Elastic Block Store (Amazon EBS) SSD à usage général (gp2). Pour plus d'informations, consultez la section Échelle pétaoctet dans Amazon OpenSearch Service.

Réduire la taille de la réponse

Pour réduire la taille de vos réponses OpenSearch Service, utilisez le paramètre filter_path pour exclure les champs inutiles.

Important : Ne filtrez pas les champs dont vous avez besoin lorsque vous identifiez ou réessayez des requêtes ayant échoué. Ces champs peuvent varier d'un client à un autre.

Dans l'exemple suivant, la réponse exclut les champs index-name, type-name et took :

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"} }

Pour plus d'informations, consultez la section Réduction de la taille des réponses.

Augmenter la taille du seuil de vidage

Par défaut, index.translog.flush_threshold_size est défini sur 512 Mo. Cela signifie qu'OpenSearch Service vide le translog lorsqu'il atteint 512 Mo. Pour plus d'informations, consultez la page Translog sur le site Web d'Elasticsearch. Le poids de la charge d'indexation détermine la fréquence du translog. Lorsque vous augmentez index.translog.flush_threshold_size, le nœud effectue l'opération de translog moins fréquemment. Les vidages d'OpenSearch Service étant des opérations gourmandes en ressources, lorsque vous réduisez la fréquence des translogs, vous améliorez les performances d'indexation.

Lorsque vous augmentez la taille du seuil de vidage, le cluster OpenSearch Service crée également moins de grands segments au lieu de plusieurs segments de petite taille. Les segments de grande taille fusionnent moins souvent et utilisent davantage de fils pour l'indexation au lieu de la fusion.

Remarque : Une augmentation de la valeur index.translog.flush_threshold_size peut également augmenter le temps nécessaire à la réalisation d'un translog. Si une partition échoue, la restauration prend plus de temps car le translog est plus volumineux.

Avant d'augmenter index.translog.flush_threshold_size, obtenez les statistiques des opérations de vidage en cours. Exécutez l'opération d'API suivante :

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

Remarque : Remplacez os-endpoint par votre point de terminaison OpenSearch Service et index-name par votre index.

Dans la sortie, vérifiez le nombre de vidages et la durée totale. L'exemple de sortie suivant montre que 124 vidages ont duré 17 690 millisecondes :

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

Pour augmenter la taille du seuil de vidage, exécutez l'opération d'API suivante :

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

Remarque : Remplacez os-endpoint par votre point de terminaison OpenSearch Service et index-name par votre index. De plus, lors de l'opération précédente, la taille du seuil de vidage est de 1024 Mo. Il est recommandé d'utiliser cette taille pour les instances qui disposent de plus de 32 Go de mémoire. Remplacez 1024 par la taille de seuil appropriée pour votre domaine OpenSearch Service.

Pour vérifier que l'activité de vidage est mise à jour, exécutez l'opération d'API _stats :

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

Remarque : Remplacez os-endpoint par votre point de terminaison OpenSearch Service et index-name par votre index.

Il est recommandé d'augmenter la valeur index.translog.flush_threshold_size uniquement pour l'index actuel. Après avoir confirmé le résultat, appliquez les modifications au modèle d'index.

Informations connexes

Bonnes pratiques opérationnelles pour Amazon OpenSearch Service

AWS OFFICIELA mis à jour il y a 2 ans