es Experimento de fusión de segmentos forzados – Noche que desaparece,
1. Preguntas
Debido a la limitación de espacio en disco del clúster, eliminamos más de mil millones de datos, pero descubrimos que después de la eliminación, el espacio disponible en el disco no aumentó rápidamente. El motivo es que el documento eliminado de es no se elimina físicamente, sino que se marca como "estado eliminado". Cuando se produce una fusión, se eliminará físicamente.
Si un índice tiene demasiados índices en estado eliminado, afectará la eficiencia de la consulta. Según este artículo1 , más del 50 % de los documentos se marcan como eliminados, lo que da como resultado una disminución del rendimiento de búsqueda de alrededor del 30 %.
Debido a que los documentos eliminados permanecen en el índice, aún deben decodificarse de las listas de publicaciones y luego omitirse durante la búsqueda, por lo que hay un costo de búsqueda adicional. Para comprobar cuánto, realicé una prueba de rendimiento de búsqueda para distintas consultas usando el índice de documentos de 100 M sin eliminar como referencia y el mismo índice con un 50 % de documentos eliminados (es decir, 150 M de documentos con 50 M eliminados). Ambos índices fueron de un solo segmento. Aquí están los resultados:
Consulta SWC Desv.estándar QPS con eliminaciones StdDev con eliminaciones % cambiar consulta de rango int 1.2 (5,1%) 0.6 (1,8%) 46% consulta de prefijo 5.7 (5,0%) 3.4 (2,3%) 41% Comodín 5.3 (4,4%) 3.2 (2,2%) 39% y alto + bajo 91.1 (2,0%) 59.5 (2,1%) 34% Frase médica 36.2 (2,8%) 24.4 (1,3%) 32% y alto + medio 16.6 (1,5%) 11.2 (1,0%) 32% ……
La mala noticia es que claramente hay un costo de rendimiento no trivial para los documentos eliminados, y esto es algo en lo que podemos trabajar para reducirlo con el tiempo (¡los parches son bienvenidos!). La buena noticia es que el costo suele ser un poco más bajo que el porcentaje de eliminaciones (50 % en esta prueba) porque estos documentos se filtran a un nivel bajo antes de que cualquiera de los costosos evaluadores y comparadores de consultas los vea. Las consultas más costosas (Phrase, Span) tienden a tener el impacto más bajo, lo que también es bueno porque son las consultas lentas las que determinan la capacidad del nodo para la mayoría de las aplicaciones.
Pero dado que la fusión forzada conduciría a una alta carga de clúster, primero se probó un índice pequeño.
2. Fusionar a la fuerza índices pequeños
El pequeño índice ocupa el siguiente
1
docs.count docs.deleted store.size
2
6176077350 417260277 1.4tb
1. Primero realice una actualización de escritura
Actualizar y escribir hasta que no se genere ningún error.
1
POST index_business_v1/_flush/synced
2. Desactive el permiso de escritura de índice
1
PUT index_business_v1/_settings
2
{
3
"índice": {
4
"bloques.escribir": verdadero
5
}
6
}
3. Ejecución de una fusión obligatoria
ES8.x puede agregar wait_for_completion=false
una respuesta de bloqueo innecesaria, only_expunge_deletes=true
lo que significa que solo se fusionan los segmentos que contienen una cierta cantidad de elementos eliminados. Esta cierta cantidad la index.merge.policy.expunge_deletes_allowed
controla el usuario, y el valor predeterminado es 10,0, lo que significa que si un fragmento eliminado/total supera el 10 %, el fragmento se fusionará.
1
POST /index_business_v1/_forcemerge?only_expunge_deletes=true
4. Ver el progreso de la tarea
1
GET _tasks?detailed=true&actions=*forcemerge&human
2
o POST _tasks/rZqBdGdSTGy2qdyZAtDD6Q:3358737
3
4
rZqBdGdSTGy2qdyZAtDD6Q:3604476
3. Cambiar el esquema de fusión
Después de habilitar only_expunge_deletes=true
el parámetro, por defecto, el resultado combinado:
eliminado se ha reducido en 300 millones. Según el cálculo, el espacio libre real es de aproximadamente 70 GB. Por lo tanto, de forma predeterminada, la fusión forzada puede reducir en gran medida la tasa de uso del disco y, cuanto mayor sea la tasa de eliminación, mayor será la reducción de la tasa de uso.
Sin embargo, debido a que el índice en el entorno de producción es demasiado grande, debe dividirse, por lo tanto, antes de dividir, elimine los documentos eliminados tanto como sea posible y aumente la tasa de eliminación configurando parámetros:
1
PUT base_domain/_settings
2
{
3
"index.merge.policy.expunge_deletes_allowed": "5.0"
4
}
1
index docs.count docs.deleted store.size
2
ip 12503736313 4207846666 40.2tb
Calculando: 4207846666/(4207846666+12503736313)∗40≈10��, se pueden liberar al menos 10 TB de datos. Además, marcar eliminado también consume espacio en disco, por lo que se estima que al final se pueden liberar 12 TB.
Durante el proceso de fusión, experimentará un proceso de aumento repetido en el uso del disco -> disminución del uso del disco. En esta prueba, 40 TB aumentaron a 44 TB y luego comenzaron a disminuir. Por lo tanto, al fusionarse, debe reservar algo de espacio de acuerdo con la situación del índice; de lo contrario, fallará directamente.
Después de aproximadamente 1,1 días, se completó la fusión, el uso del disco se redujo de 40 TB a 22 TB y se liberaron 18 TB de espacio. Sin embargo, hay algunos segmentos relativamente grandes en cada fragmento, el más grande alcanza los 40 GB.
4. Ver información del segmento
1. Verifique qué índices se están fusionando actualmente
1
OBTENER /_cat/índices/?s=recuento de segmentos:desc&v&h=índice,recuento de segmentos,memoria de segmentos,total de memoria,mergesCurrent,mergesCurrentDocs,storeSize,p,r
índice | segmentosCount | segmentosMemoria | total de memoria | fusiona actual | fusionaCurrentDocs | storeSize | pag | r |
---|---|---|---|---|---|---|---|---|
dominio | 22766 | 7.5gb | 12,2 gb | 48 | 21343329 | 87,5 TB | 160 | 0 |
ip | 14270 | 13,3 gb | 50.7gb | 47 | 18168708 | 40,4 tb | 160 | 0 |
DNS | 2220 | 2.8gb | 15,8 gb | 0 | 0 | 3,7 tb | 60 | 0 |
2. Consultar el estado de cada segmento de un índice
1
OBTENER _cat/segments?index=sumap_domain*&v&s=docs.deleted:desc
índice | casco | preparación | ip | segmento | generación | docs.count | docs.borrado | tamaño | tamaño.memoria | comprometido | buscable | versión | compuesto |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
índice_dominio | 36 | pag | 172.16.80.1 | _stmt | 1344773 | 161171 | 692426 | 4.3gb | 1181094 | verdadero | verdadero | 8.2.0 | verdadero |
3. Ver el estado eliminado de un índice como un todo
1
OBTENER _cat/indices?index=sumap_domain*&v&h=index,docs.count,docs.deleted,store.size
índice | docs.count | docs.borrado | tienda.tamaño |
---|---|---|---|
dominio | 2683311417 | 943551705 | 87,5 TB |
5. Problemas causados por la fusión forzada
La combinación forzada dará como resultado segmentos >= 5 GB. No está claro qué sucederá cuando el tamaño de un segmento alcance los 100 GB. La obtención de datos a través de consultas actualmente da como resultado:
- Si continúa actualizando el segmento, la combinación de fondo no se preocupará por el segmento> = 5 GB, y debe ejecutar manualmente forcemerge
referencia
1 ¿ Cómo afectan los documentos eliminados al rendimiento de la búsqueda?