Descripción corta
Para mejorar el rendimiento de la indexación en tu clúster de OpenSearch Service, haz lo siguiente:
- Distribuye las particiones de manera uniforme en los nodos de datos del índice en el que ingieres.
- Aumenta el intervalo de actualización a 60 segundos o más.
- Cambia el recuento de réplicas a cero.
- Experimenta para encontrar el tamaño óptimo de las solicitudes masivas.
- Usa un tipo de instancia con volúmenes de almacén de instancias SSD, como I3.
- Reduce el tamaño de la respuesta.
- Aumenta el tamaño del umbral de vaciado.
Resolución
Distribución de las particiones de manera uniforme en los nodos de datos del índice en el que se ingiere
De forma predeterminada, OpenSearch Service distribuye las particiones en función del número de fragmentos, no del tamaño de las particiones. Utiliza la siguiente fórmula para comprender cómo distribuye OpenSearch Service las particiones:
El número de particiones por nodo equivale al número de particiones para el índice dividido entre el número de nodos de datos
Por ejemplo, si hay 24 particiones en el índice y hay ocho nodos de datos, OpenSearch Service asigna tres particiones a cada nodo.
Para crear una distribución equivalente, utiliza tanto el tamaño como el recuento de particiones. Para obtener más información, consulta Get started with Amazon OpenSearch Service: How many shards do I need? (Introducción a OpenSearch Service: ¿cuántas particiones necesito?)
Aumento del intervalo de actualización a 60 segundos o más
La actualización del índice de OpenSearch Service permite que las búsquedas encuentren tus documentos. Al actualizar el índice, OpenSearch Service usa los mismos recursos que se han usado para indexar los subprocesos.
El intervalo de actualización predeterminado es de un segundo. Al aumentar el intervalo de actualización, el nodo de datos realiza menos llamadas a la API. Para evitar 429 errores, se recomienda aumentar el intervalo de actualización.
Nota: El intervalo de actualización predeterminado es de un segundo para los índices que reciben una o más solicitudes de búsqueda en los últimos 30 segundos. Para obtener más información sobre el intervalo predeterminado actualizado, consulta Refresh API (Actualización de API) en el sitio web de Elasticsearch.
Cambio del recuento de réplicas a cero
Si prevés una indexación intensa, establece el valor index.number_of_replicas en 0. Cada réplica duplica el proceso de indexación. Al desactivar las réplicas, mejoras el rendimiento del clúster. Una vez finalizada la indexación intensa, reactiva los índices replicados.
Importante: Si un nodo falla cuando las réplicas están desactivadas, es posible que pierdas datos. Desactiva las réplicas solo si puedes tolerar la pérdida de datos durante un breve periodo de tiempo.
Experimentación para encontrar el tamaño óptimo de las solicitudes masivas
Inicia con un tamaño de solicitud masiva de 5 MiB a 15 MiB. A continuación, aumenta lentamente el tamaño de la solicitud hasta que el rendimiento de la indexación deje de mejorar. Para obtener más información, consulta Using and sizing bulk requests (Uso y dimensionamiento de solicitudes masivas) en el sitio web de Elastic.
Nota: Algunos tipos de instancias limitan las solicitudes masivas a 10 MiB. Para obtener más información, consulta Cuotas de red.
Usa un tipo de instancia que tenga volúmenes de almacén de instancias SSD
Las instancias I3 proporcionan almacenamiento rápido y local con Memory Express (NVMe). Las instancias I3 ofrecen un mejor rendimiento de ingesta que las instancias que utilizan volúmenes de Amazon Elastic Block Store (Amazon EBS) de uso general SSD (gp2). Para obtener más información, consulta Desescala horizontal de petabytes en Amazon OpenSearch Service.
Reducción del tamaño de la respuesta
Para reducir el tamaño de las respuestas de OpenSearch Service, utiliza el parámetro filter_path para excluir los campos innecesarios.
Importante: No filtre los campos que necesitas para identificar o reintentar las solicitudes fallidas. Estos campos pueden variar según el cliente.
En el ejemplo siguiente, la respuesta excluye los campos index-name, type-name y 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"} }
Para obtener más información, consulta Reducción del tamaño de la respuesta.
Aumento del tamaño del umbral de vaciado
De forma predeterminada, index.translog.flush_threshold_size está establecido en 512 MB. Esto significa que OpenSearch Service vacía el registro translog cuando alcanza los 512 MB. Para obtener más información, consulta Translog en el sitio web de Elasticsearch. La intensidad de la carga de indexación determina la frecuencia del translog. Al aumentar index.translog.flush_threshold_size, el nodo realiza la operación translog con menos frecuencia. Dado que las operaciones de vaciado de OpenSearch Service son operaciones que consumen muchos recursos, al reducir la frecuencia de los translogs, se mejora el rendimiento de la indexación.
Al aumentar el tamaño del umbral de vaciado, el clúster de OpenSearch Service también crea menos segmentos grandes en lugar de varios segmentos pequeños. Los segmentos grandes se combinan con menos frecuencia y utilizan más subprocesos para indexar en lugar de fusionarlos.
Nota: Un aumento de index.translog.flush_threshold_size también puede aumentar el tiempo que tarda en completarse un translog. Si se produce un error en una partición, la recuperación lleva más tiempo porque el registro es mayor.
Antes de aumentar index.translog.flush_threshold_size, obténlas estadísticas actuales de la operación de vaciado. Ejecuta la siguiente operación de API:
curl -XPOST "os-endpoint/index-name/_stats/flush?pretty"
Nota: Sustituye os-endpoint por el punto de enlace del servicio OpenSearch y el nombre del índice por tu índice.
En la salida, comprueba el número de operaciones de vaciado y el tiempo total. El siguiente ejemplo de salida muestra que hay 124 operaciones de vaciado que tardaron 17 690 milisegundos:
{ "flush": {
"total": 124,
"total_time_in_millis": 17690
}
}
Para aumentar el tamaño del umbral de vaciado, ejecuta la siguiente operación de API:
$ curl -XPUT "os-endpoint/index-name/_settings?pretty" -d "{"index":{"translog.flush_threshold_size" : "1024MB"}}"
Nota: Sustituye os-endpoint por el punto de enlace del servicio OpenSearch y el nombre del índice por tu índice. Además, en la operación anterior, el tamaño del umbral de vaciado es de 1024 MB. Se recomienda usar este tamaño para las instancias que tienen más de 32 GB de memoria. Sustituye 1024 por el tamaño de umbral correcto para tu dominio de OpenSearch Service.
Para comprobar que la actividad de limpieza se actualiza, ejecuta la operación de API _stats:
$ curl _XGET "os-endpoint/index-name/_stats/flush?pretty"
Nota: Sustituye os-endpoint por el punto de enlace del servicio OpenSearch y el nombre del índice por tu índice.
Se recomienda aumentar el tamaño de index.translog.flush_threshold_size únicamente para el índice actual. Tras confirmar el resultado, aplica los cambios a la plantilla de índice.
Información relacionada
Prácticas recomendadas orientativas de Amazon OpenSearch Service