In che modo è possibile migliorare le prestazioni di indicizzazione nel mio cluster Amazon OpenSearch Service?

5 minuti di lettura
0

Desidero ottimizzare le operazioni di indicizzazione nel servizio OpenSearch di Amazon per ottenere la massima velocità effettiva di importazione dati. In che modo posso farlo?

Risoluzione

Accertarsi che i frammenti siano distribuiti uniformemente tra i nodi di dati per l'indice in cui è in corso l’inserimento

Utilizza la seguente formula per confermare che le partizioni sono distribuite uniformemente:

Numero di partizioni per indice = k * (Numero di nodi di dati), in cui k è il numero di partizioni per nodo

Ad esempio, se nell'indice sono presenti 24 partizioni e vi sono otto nodi di dati, il servizio OpenSearch assegna tre partizioni a ciascun nodo. Per ulteriori informazioni, consultare Introduzione ad Amazon OpenSearch Service: quanti shard sono necessari?

Aumentare il valore refresh_interval a 60 secondi o più

Aggiorna l'indice di OpenSearch Service per rendere i documenti disponibili per la ricerca. Tieni presente che l'aggiornamento dell'indice richiede le stesse risorse utilizzate dai thread di indicizzazione.

L'intervallo di aggiornamento di default è di un secondo. Quando si aumenta l'intervallo di aggiornamento, il nodo dati effettua meno chiamate API. L'intervallo di aggiornamento può essere più breve o più veloce a seconda della durata dell'intervallo di aggiornamento. Per evitare 429 errori, è consigliabile aumentare l'intervallo di aggiornamento.

Nota: l'intervallo di aggiornamento predefinito è di un secondo per gli indici che ricevono una o più richieste di ricerca negli ultimi 30 secondi. Per ulteriori informazioni sull'intervallo predefinito aggiornato, consulta API _refresh versione 7.x sul sito Web di Elasticsearch.

Portare il numero di repliche a zero

Se prevedi un'indicizzazione pesante, prendi in considerazione di impostare il valore index.number_of_replicas su “0”. Ogni replica duplica il processo di indicizzazione. Di conseguenza, la disabilitazione delle repliche migliorerà le prestazioni del cluster. Al termine dell'indicizzazione pesante, riattiva gli indici replicati.

Importante: se un nodo ha esito negativo mentre le repliche sono disattivate, vi è il rischio di perdere i dati. Disabilitare le repliche solo se è possibile tollerare la perdita di dati per un breve periodo.

Esperimento per trovare la dimensione ottimale della richiesta in blocco

Inizia con la dimensione della richiesta in blocco da 5 MiB a 15 MiB. Quindi, aumentare lentamente la dimensione della richiesta fino a quando le prestazioni di indicizzazione non smetteranno di migliorare. Per ulteriori informazioni, consulta Utilizzo e dimensionamento delle richieste in blocco sul sito Web Elasticsearch.

Nota: alcuni tipi di istanza limitano le richieste in blocco a 10 MiB. Per ulteriori informazioni, consulta Limiti di rete.

Utilizzare un tipo di istanza con volumi di archiviazione delle istanze SSD (ad esempio I3)

Le istanze I3 forniscono storage rapido e locale della memoria express (NVMe). Le istanze I3 offrono prestazioni di importazione dati migliori rispetto alle istanze che utilizzano volumi General Purpose SSD (gp2) Amazon Elastic Block Store (Amazon EBS). Per ulteriori informazioni, consulta la sezione Capacità di più petabyte per il servizio OpenSearch di Amazon.

Riduzione delle dimensioni della risposta

Per ridurre le dimensioni della risposta di OpenSearch Service, utilizzare il parametro filter_path per escludere campi non necessari. Assicurati di non filtrare i campi necessari per identificare o riprovare le richieste non riuscite. Questi campi possono variare in base al client.

Nell'esempio seguente, i campi index-name, type-name e took sono esclusi dalla risposta:

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

Per ulteriori informazioni, consulta la sezione Riduzione delle dimensioni della risposta.

Aumentare il valore di index.translog.flush_threshold_size

Per impostazione predefinita, index.translog.flush_threshold_size è impostato su 512 MB. Ciò significa che il translog viene svuotato quando raggiunge i 512 MB. Il peso del carico di indicizzazione determina la frequenza del translog. Quando si aumenta index.translog.flush_threshold_size, il nodo esegue l'operazione di translog con minore frequenza. Poiché i flush di OpenSearch Service sono operazioni che richiedono molte risorse, la riduzione della frequenza delle traslog migliora le prestazioni di indicizzazione. Aumentando la dimensione della soglia di scarico, il cluster OpenSearch Service crea anche meno segmenti di grandi dimensioni (invece di più segmenti piccoli). I segmenti di grandi dimensioni si uniscono meno spesso e per l'indicizzazione vengono utilizzati più thread anziché per l'unione.

Nota: un aumento di index.translog.flush_threshold_size può anche determinare l’aumento del tempo necessario per il completamento di una translog. Se una partizione fallisce, il recupero richiede più tempo perché il translog è più grande.

Prima di aumentare index.translog.flush_threshold_size, chiama la seguente operazione API per ottenere le statistiche correnti sulle operazioni di flush:

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

Sostituire l'endpoint del sistema operativo e il nome dell'indice con le rispettive variabili.

Nell'output, annotare il numero di flush e il tempo totale. L'output di esempio seguente mostra che ci sono 124 flush, che hanno richiesto 17.690 millisecondi:

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

Per aumentare la dimensione della soglia di scarico, richiamare la seguente operazione API:

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

In questo esempio, la dimensione della soglia di scarico è impostata su 1024 MB, ideale per le istanze con più di 32 GB di memoria.

Nota: sceglie la dimensione di soglia adeguata per il proprio dominio OpenSearch Service.

Eseguire nuovamente l'operazione API _stats per vedere se l'attività di svuotamento è cambiata:

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

Nota: è consigliabile aumentare index.translog.flush_threshold_size esclusivamente per l'indice corrente. Dopo aver confermato il risultato, applicare le modifiche al modello di indice.


Informazioni correlate

Best practice per Amazon OpenSearch Service

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa