Opérations Elasticsearch multiples ou simultanées
Plusieurs opérations Elasticsearch ou simultanées peuvent réduire les performances. La recherche de la cause doit être effectuée avec attention et planification.
- Comme prévu pour la haute saison, lorsque la charge de travail de production est à sa capacité ou à son pic.
- Toutes les opérations liées à l'index qui doivent être exécutées pendant la charge de travail maximale (génération d'index, mises à jour NRT de l'index, mises à jour de l'index de stock, etc.).
- D'autres opérations n'affectent pas directement l'index ou les données de recherche, mais peuvent affecter les opérations globales (par exemple, effacement complet du cache après réindexation, etc.).
Le cas de la congestion de flux
Certaines situations sont fréquemment rencontrées lors de l'exécution d'une charge de travail mixte, comme la congestion en entonnoir et la dégradation des performances. Contrairement au type d'opération unique, il s'agit d'un exercice d'optimisation plus compliqué qui observe et ajuste les ressources insuffisantes et équilibre ces ressources en fonction d'une certaine priorité. Par exemple, la requête de recherche en production doit précéder les opérations de génération d'index.
Dans un cas où la lenteur d'Elasticsearch est due à un mélange de charge de travail dans lequel le cluster de recherche indexait et servait des données de requête opérationnelles, le réglage est plus compliqué et nécessite une prise de décision initiale concernant les priorités des types de mélange de charge de travail.
Dans la plupart des cas, vous devez prioriser un type d'opération par rapport à un autre. Dans cet exemple, il faudrait sélectionner une priorité plus élevée pour les recherches actives et une priorité inférieure pour la création d'index dans l'environnement de création.
Modification des unités d'exécution d'écriture :
La modification des unités d'exécution d'écriture et de recherche dans Elasticsearch peut optimiser efficacement le cluster pour améliorer les performances et fournir une hiérarchisation entre les opérations d'écriture (génération d'index d'authentification) et opérationnelles (requêtes d'unités d'exécution de recherche).
Elasticsearch dispose d'un pool d'unités d'exécution d'écriture qui gère les requêtes d'indexation. Par défaut, ce pool a une taille de (nombre de cœurs d'UC x 2) + 1. Vous pouvez augmenter ou réduire la taille de ce pool en fonction de la charge de travail de votre cluster.
Pour modifier la taille du pool d'unités d'exécution d'écriture, vous pouvez utiliser le paramètre thread_pool.write.size dans le fichier de configuration Elasticsearch. Par exemple, pour augmenter la taille du pool d'unités d'exécution d'écriture à 16, vous pouvez ajouter la ligne suivante au fichier de configuration :
thread_pool.write.size : 16.
Modification des unités d'exécution de recherche
Elasticsearch dispose également d'un pool d'unités d'exécution de recherche qui gère les requêtes de recherche. Par défaut, ce pool a une taille de (nombre de coeurs d'UC x 3) / 2. Vous pouvez augmenter ou réduire la taille de ce pool en fonction de la charge de travail de votre cluster.
Pour modifier la taille du pool d'unités d'exécution de recherche, vous pouvez utiliser le paramètre thread_pool.search.size dans le fichier de configuration Elasticsearch. Par exemple, pour augmenter la taille du pool d'unités d'exécution de recherche à 24, vous pouvez ajouter la ligne suivante au fichier de configuration :
thread_pool.search.size : 24.
- Intervalle d'actualisation
-
Par défaut, Elasticsearch actualise l'index de recherche toutes les secondes. Cela signifie que lorsqu'un document est indexé, il sera immédiatement disponible pour la recherche au prochain intervalle d'actualisation. Si vous avez un volume élevé de requêtes d'indexation, envisagez d'augmenter l'intervalle d'actualisation pour réduire la fréquence des actualisations d'index et améliorer les performances d'indexation. Inversement, si vous avez besoin d'une indexation en temps réel, vous pouvez réduire l'intervalle d'actualisation.
Pour ajuster l'intervalle d'actualisation, utilisez le paramètre index.refresh_interval. Par exemple, pour définir l'intervalle d'actualisation sur 5 secondes, vous pouvez exécuter la commande suivante :PUT /my_index/_settings { "index" : { "refresh_interval" : "5s" } } - Nombre de fragments
-
Le nombre de fragments dans un index peut également affecter les performances d'indexation. Si vous disposez d'un index étendu avec de nombreux fragments, les performances d'indexation peuvent être plus lentes en raison de la surcharge de coordination des écritures sur plusieurs fragments. En général, il est recommandé de conserver le nombre de fragments par index entre 1 et 5.
Pour ajuster le nombre de fragments, vous pouvez utiliser le paramètre index.number_of_shards. Par exemple, pour définir le nombre de fragments sur 3, vous pouvez exécuter la commande suivante :PUT /my_index/_settings { "index" : { "number_of_shards" : 3 } }