Come posso migliorare le prestazioni di indicizzazione nel mio cluster del Servizio OpenSearch di Amazon?
Desidero ottimizzare le operazioni di indicizzazione nel Servizio OpenSearch di Amazon per massimizzare il throughput di importazione.
Breve descrizione
Per migliorare le prestazioni di indicizzazione di un cluster del Servizio OpenSearch, intraprendi le seguenti azioni:
- Distribuisci gli shard in modo uniforme tra i nodi di dati per l'indice in cui esegui l'importazione.
- Aumenta l'intervallo di aggiornamento a 60 secondi o più.
- Azzera il numero di repliche.
- Sperimenta per trovare la dimensione ottimale per le richieste in blocco.
- Utilizza un tipo di istanza con volumi di archivio dell'istanza SSD, come I3.
- Riduci la dimensione della risposta.
- Aumenta la dimensione della soglia di svuotamento.
Risoluzione
Distribuisci gli shard in modo uniforme tra i nodi di dati per l'indice in cui esegui l'importazione
Per impostazione predefinita, il Servizio OpenSearch distribuisce gli shard in base al loro numero, non in base alla loro dimensione. Utilizza la seguente formula per capire come il Servizio OpenSearch distribuisce gli shard:
Numero di shard per nodo = numero di shard per l'indice/numero di nodi di dati
Ad esempio, se sono presenti 24 shard nell'indice e otto nodi di dati, il Servizio OpenSearch assegna tre shard a ogni nodo.
Per creare una distribuzione equivalente, utilizza sia la dimensione degli shard che il loro numero. Per ulteriori informazioni, consulta Get Started with Amazon OpenSearch Service: How Many Shards Do I Need? (Nozioni di base sul Servizio OpenSearch di Amazon: quanti shard mi servono?)
Aumenta l'intervallo di aggiornamento a 60 secondi o più
L'aggiornamento dell'indice del Servizio OpenSearch consente di cercare documenti. Quando aggiorni l'indice, il Servizio OpenSearch utilizza le stesse risorse utilizzate per indicizzare i thread.
L'intervallo di aggiornamento predefinito è un secondo. Quando aumenti l'intervallo di aggiornamento, il nodo dati effettua meno chiamate API. Per evitare un errore 429, è consigliabile aumentare l'intervallo di aggiornamento.
Nota: l'intervallo di aggiornamento predefinito è 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 Refresh API (API refresh) sul sito Web Elasticsearch.
Azzera il numero di repliche
Se prevedi un'indicizzazione intensiva, imposta il valore index.number_of_replicas su 0. Ogni replica duplica il processo di indicizzazione. Quando disattivi le repliche, migliori le prestazioni del cluster. Una volta completata l'indicizzazione completa, riattiva gli indici replicati.
Importante: se un nodo si guasta quando le repliche sono disattivate, potresti perdere dati. Disattiva le repliche solo se riesci a tollerare la perdita di dati per un breve periodo.
Sperimenta per trovare la dimensione ottimale per le richieste in blocco
Inizia con una dimensione di richiesta in blocco compresa tra 5 MiB e 15 MiB. Quindi aumenta lentamente la dimensione della richiesta fino a quando le prestazioni di indicizzazione non smettono di migliorare. Per ulteriori informazioni, consulta Using and sizing bulk requests (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 Quote di rete.
Utilizza un tipo di istanza con volumi di archivio dell'istanza SSD
Le istanze I3 forniscono un'archiviazione locale veloce Memory Express (NVMe). e prestazioni di importazione migliori rispetto alle istanze che utilizzano volumi Amazon Elastic Block Store (Amazon EBS) per uso generico SSD (gp2). Per ulteriori informazioni, consulta Scala in petabyte del Servizio OpenSearch di Amazon.
Riduci la dimensione della risposta
Per ridurre la dimensione delle risposte del Servizio OpenSearch, utilizza il parametro filter_path per escludere i campi non necessari.
Importante: non filtrare i campi necessari quando identifichi o ritenti le richieste non riuscite. I campi possono variare in base al client.
Nell'esempio seguente, la risposta esclude i campi index-name, type-name e 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"} }
Per ulteriori informazioni, consulta Riduzione delle dimensioni della risposta.
Aumenta la dimensione della soglia di svuotamento
Per impostazione predefinita, il valore index.translog.flush_threshold_size è impostato su 512 MB. Ciò significa che il Servizio OpenSearch svuota il translog quando raggiunge 512 MB. Per ulteriori informazioni, consulta Translog sul sito web Elasticsearch. Il peso del carico di indicizzazione determina la frequenza del translog. Quando aumenti il valore index.translog.flush_threshold_size, il nodo esegue l'operazione di translog meno frequentemente. Poiché gli svuotamenti del Servizio OpenSearch sono operazioni che richiedono molte risorse, riducendo la frequenza dei translog, migliori le prestazioni di indicizzazione.
Quando aumenti la dimensione della soglia di svuotamento, il cluster del Servizio OpenSearch crea anche un numero minore segmenti di grandi dimensioni anziché un numero maggiore di segmenti di piccole dimensioni. I segmenti di grandi dimensioni si uniscono meno spesso e utilizzano più thread per l'indicizzazione anziché per l'unione.
Nota: un aumento del valore index.translog.flush_threshold_size può anche aumentare il tempo necessario per il completamento di un translog. Se uno shard genera un errore, il ripristino richiede più tempo perché il translog è più grande.
Prima di aumentare il valore index.translog.flush_threshold_size, recupera le statistiche correnti sull'operazione di svuotamento. Esegui questa operazione API:
curl -XPOST "os-endpoint/index-name/_stats/flush?pretty"
Nota: sostituisci os-endpoint con l'endpoint del tuo Servizio OpenSearch e index-name con il tuo indice.
Nell'output, controlla il numero di svuotamenti e il tempo totale. L'esempio di output seguente mostra 124 svuotamenti che hanno richiesto 17.690 millisecondi:
{ "flush": { "total": 124, "total_time_in_millis": 17690 } }
Per aumentare la dimensione della soglia di svuotamento, esegui questa operazione API:
$ curl -XPUT "os-endpoint/index-name/_settings?pretty" -d "{"index":{"translog.flush_threshold_size" : "1024MB"}}"
Nota: sostituisci os-endpoint con l'endpoint del tuo Servizio OpenSearch e index-name con il tuo indice. Inoltre, nell'operazione precedente, la dimensione della soglia di svuotamento è 1.024 MB. È consigliabile utilizzare questa dimensione per le istanze con più di 32 GB di memoria. Sostituisci 1024 con la dimensione della soglia corretta per il tuo dominio del Servizio OpenSearch.
Per verificare che l'attività di svuotamento si aggiorni, esegui l'operazione API**_stats**:
$ curl _XGET "os-endpoint/index-name/_stats/flush?pretty"
Nota: sostituisci os-endpoint con l'endpoint del tuo Servizio OpenSearch e index-name con il tuo indice.
È consigliabile aumentare il valore index.translog.flush_threshold_size solo per l'indice corrente. Dopo aver verificato il risultato, applica le modifiche al modello di indice.
Informazioni correlate
Best practice operative per il Servizio OpenSearch di Amazon
- Argomenti
- Analytics
- Lingua
- Italiano
