Come posso risolvere i problemi relativi ai picchi di latenza della ricerca nel mio cluster Amazon OpenSearch?

Ultimo aggiornamento: 05/08/2021

Sto riscontrando picchi di latenza della ricerca nel mio cluster Amazon OpenSearch Service. Come posso risolvere i problemi relativi ai picchi di latenza della ricerca?

Breve descrizione

Per le richieste di ricerca, il tempo di andata e ritorno viene calcolato come segue:

Round trip = Time the query spends in the query phase + time in the fetch phase + time spent in the queue + network latency

Il parametro SearchLatency su Amazon CloudWatch fornisce il tempo impiegato dalla query nella fase di query.

Esistono diversi passaggi per la risoluzione dei problemi che puoi eseguire per risolvere i problemi di ricerca dei picchi di latenza nel cluster di OpenSearch Service, tra cui:

  • Controlla l'insufficienza delle risorse fornite sul cluster
  • Controlla la presenza di rifiuti della ricerca utilizzando il parametro ThreadPoolSearchRejected in CloudWatch
  • Utilizza i registri lenti di ricerca e l'API del profilo
  • Risolvi eventuali errori di timeout del gateway 504

Risoluzione

Controlla l'insufficienza delle risorse fornite sul cluster

Puoi riscontrare picchi di latenza della ricerca se le risorse assegnate al cluster non sono sufficienti. Utilizza le best practice riportate di seguito per assicurarti di disporre di risorse sufficienti.

1.    Esamina il parametro CPUUtilization e la pressione di JVMMemory del cluster utilizzando Amazon CloudWatch per verificare che siano entro le soglie consigliate. Per ulteriori informazioni, consulta Allarmi consigliati di CloudWatch.

2.    Utilizza l'API Node Stats per ottenere statistiche a livello di nodo sul tuo cluster:

GET /_nodes/stats

Nell'output, controlla le seguenti sezioni: cache, fielddata e jvm. Esegui questa API più volte con un certo ritardo per confrontare gli output.

3.    OpenSearch Service utilizza la cache del file system per effettuare richieste di ricerca più rapide. Esamina l'output dell'API NodeStats per le espulsioni della cache. Un numero elevato di espulsioni della cache nell'output significa che la dimensione della cache è inadeguata per soddisfare la richiesta. In questo caso, considera l'utilizzo di nodi più grandi con più memoria.

4.    L'esecuzione di aggregazioni su campi che contengono valori altamente univoci può causare un aumento dell'utilizzo dell'heap. Se le query di aggregazione sono già in uso, le operazioni di ricerca utilizzano FieldData. FieldData viene utilizzato anche per ordinare e accedere ai valori dei campi nello script. Le espulsioni di FieldData dipendono dalla dimensione del file indices.fielddata.cache.size e questo rappresenta il 20% dello spazio heap JVM. Le espulsioni iniziano quando la cache viene superata.

Per ulteriori informazioni sulla risoluzione dei problemi relativi alla memoria JVM elevata, consulta Come posso risolvere i problemi relativi alla pressione elevata della memoria JVM sul cluster Amazon OpenSearch Service?

Per risolvere i problemi relativi all'elevato utilizzo della CPU, consulta Come posso risolvere i problemi relativi all'utilizzo elevato della CPU nel cluster Amazon OpenSearch Service?

Controlla la presenza di rifiuti della ricerca utilizzando il parametro ThreadpoolSearchRejected in CloudWatch

Per controllare la presenza di rifiuti della ricerca utilizzando CloudWatch, segui i passaggi descritti in Come risolvo i rifiuti della ricerca o di scrittura in Amazon OpenSearch Service?

Utilizza Cerca i registri lenti per identificare le query a esecuzione prolungata

Utilizza i registri lenti per identificare sia le query a esecuzione prolungata che il tempo impiegato da una query per una particolare partizione. Puoi impostare le soglie per la fase di query e quindi recuperare la fase per ogni indice. Per ulteriori informazioni sulla configurazione dei registri lenti, consulta Visualizzazione dei registri lenti di Amazon OpenSearch Service. Assicurati di impostare "profile":true per la tua query di ricerca per ottenere un'analisi dettagliata del tempo impiegato dalla query nella fase di query.

Nota: se imposti la soglia per la registrazione su un valore molto basso, la pressione della memoria JVM può aumentare. Ciò può portare a garbage collection (GC) più frequenti che aumentano l'utilizzo della CPU e aumentano la latenza sul cluster. La registrazione di più query può anche aumentare i costi. L'output dell'API del profilo può essere lungo, aggiungendo un sovraccarico significativo a qualsiasi query di ricerca.

Risoluzione di eventuali errori di timeout del gateway 504

Dai registri delle applicazioni del cluster OpenSearch Service, puoi visualizzare codici di errore HTTP specifici per le singole richieste. Per ulteriori informazioni sulla risoluzione degli errori di timeout del gateway HTTP 504, consulta Come posso prevenire gli errori di timeout del gateway HTTP 504 in Amazon OpenSearch Service?

Nota: devi abilitare i registri degli errori per identificare codici di errore HTTP specifici. Per ulteriori informazioni sui codici di errore HTTP, consulta Visualizzazione dei registri degli errori di Amazon OpenSearch Service.

Altri fattori che possono provocare un'elevata latenza della ricerca

Esistono numerosi altri fattori che possono provocare un'elevata latenza della ricerca. Per ulteriori problemi relativi all'elevata latenza della ricerca, attieniti ai seguenti suggerimenti:

  • L'attività di garbage collection (GC) frequente o di lunga durata può provocare problemi di prestazioni di ricerca. L'attività di garbage collection (GC) può mettere in pausa i thread e aumentare la latenza di ricerca. Per ulteriori informazioni, consulta Gestione dell'heap gestito di Elasticsearch sul sito Web di Elasticsearch.
  • Le IOPS con provisioning (o istanze i3) potrebbero aiutarti a rimuovere eventuali colli di bottiglia di Amazon Elastic Block Store (Amazon EBS). Nella maggior parte dei casi, non ne avrai bisogno. È da considerarsi best practice testare le prestazioni tra i nodi i3 e i nodi r5 prima di passare direttamente a i3.
  • Un cluster con troppe partizioni può causare un aumento dell'utilizzo delle risorse, anche quando il cluster è inattivo. Troppe partizioni rallentano le prestazioni delle query. Sebbene l'aumento del numero delle partizioni di replica possa aiutarti a ottenere ricerche più rapide, assicurati di non andare oltre le 1000 partizioni su un determinato nodo. Inoltre, assicurati che le dimensioni delle partizioni siano comprese tra 10 GiB e 50 GiB. Idealmente, il numero massimo di partizioni su un nodo dovrebbe essere heap * 20.
  • Troppi segmenti o troppi documenti eliminati possono influire sulle prestazioni di ricerca. L'utilizzo dell'unione forzata su indici di sola lettura può essere d'aiuto in questo caso. Se il tuo caso d'uso lo permette, aumenta l'aggiornamento interno sugli indici attivi. Per ulteriori informazioni, consulta la sezione Gestione dei documenti eliminati da Lucene sul sito Web di Elasticsearch.
  • Se il cluster si trova in un VPC, considera di eseguire le applicazioni all'interno dello stesso VPC.
  • Considera l'utilizzo di nodi UltraWarm o nodi hot data per i dati di sola lettura. L'archiviazione a caldo offre le prestazioni più rapide possibili per l'indicizzazione e la ricerca di nuovi dati. Tuttavia, i nodi UltraWarm sono un modo conveniente per archiviare grandi quantità di dati di sola lettura nel cluster. Per gli indici su cui non stai scrivendo attivamente e che non necessitano delle stesse prestazioni, UltraWarm offre costi per GiB di dati significativamente inferiori.
  • Verifica il tuo carico di lavoro per capire se è vantaggioso avere i dati che stai cercando disponibili su tutti i nodi. Alcune applicazioni traggono vantaggio da questo approccio, soprattutto se sul cluster sono presenti pochi indici. Per fare ciò, aumenta il numero di partizioni di replica. Tieni presente che ciò può aumentare la latenza di indicizzazione. Inoltre, potrebbe essere necessario un'ulteriore archiviazione di Amazon EBS per gestire le repliche aggiunte. Ciò aumenterà i costi del volume EBS.
  • Cerca il minor numero possibile di campi, evita script e query con caratteri jolly. Per ulteriori informazioni, consulta Ottimizza la velocità di ricerca sul sito Web di Elasticsearch.
  • Per gli indici con molte partizioni, puoi utilizzare il routing personalizzato per velocizzare le ricerche. Il routing personalizzato garantisce che vengano eseguite query solo sulle partizioni che detengono i tuoi dati, invece di trasmettere la richiesta a tutte le partizioni dell'indice. Per ulteriori informazioni, consulta Personalizzazione del routing dei documenti sul sito Web di Elasticsearch.

Amazon OpenSearch Service è il successore di Amazon Elasticsearch Service.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?