Desahucio
En el servidor Couchbase, el subsistema de almacenamiento Plasma utilizado por el Índice Secundario Global se inicializa con un valor específico que se utiliza como su cuota de memoria. El subsistema de almacenamiento realiza un seguimiento constante de su uso de memoria y se adhiere a su cuota de memoria liberando la memoria asignada que no es obligatoria. La liberación de memoria suele denominarse desalojo. En este artículo describiremos los algoritmos de desalojo utilizados y los parámetros de configuración que pueden ajustarse para controlar eficazmente el proceso de desalojo.
El subsistema de almacenamiento organiza los datos que gestiona en páginas de tamaño variable en la memoria. Realiza un seguimiento del uso de memoria y comienza a desalojar páginas al disco cuando el uso de memoria supera la cuota de memoria asignada. Después de desalojar un número suficiente de páginas para que la memoria utilizada sea inferior a la cuota, el desalojo se detiene. Este proceso de activación del desalojo cuando la memoria utilizada supera la cuota de memoria se denomina "Desahucio por estallido". Burst Eviction detiene las mutaciones y los escaneos hasta que la memoria utilizada está por debajo de la cuota. Esto afecta negativamente al uso de la CPU, la latencia y el rendimiento del sistema.
Para mitigar los efectos negativos sobre la latencia y el rendimiento causados por el desalojo en ráfagas, se ha introducido otro tipo de desalojo, "Desahucio periódico", también se ejecuta junto con él. El desalojo periódico se activa a intervalos regulares, llamados intervalos de barrido, para escanear las páginas en memoria y rastrear las páginas utilizadas activamente. El subconjunto de páginas utilizadas activamente por mutaciones o escaneos entre el intervalo de barrido actual y el anterior se denomina conjunto de trabajo. Desalojar las páginas que no están en el conjunto de trabajo creará espacio en caso de un pico en el uso de memoria y también mantendrá las páginas necesarias en memoria. Cuando la memoria utilizada supera la cuota o un umbral mínimo preestablecido, las páginas que no están en el conjunto de trabajo son desalojadas por el subproceso de intercambio. Los hilos de intercambio también se ejecutan a intervalos regulares, mucho más cortos.
La cuota de memoria, que se aplica a todas las instancias de Plasma en un nodo, se establece a través de GSI. Plasma asegura que todas las instancias se adhieran a esta cuota de memoria intentando liberar asignaciones que no son obligatorias. Cuando la memoria utilizada sobrepasa la cuota, las páginas que no están en el conjunto de trabajo son encontradas y desalojadas por el hilo swapper para reducir la memoria utilizada. Este desalojo en ráfaga se detiene una vez que la memoria utilizada está por debajo de la cuota. Cuando el desalojo en ráfaga se ejecuta de nuevo, debe encontrar de nuevo las víctimas a desalojar. Para que el desalojo sea eficiente, el subproceso de intercambio utiliza el algoritmo del reloj para marcar y barrer las páginas a desalojar. Se ejecuta periódicamente para marcar las páginas víctimas a desalojar facilitando que el desalojo en ráfaga encuentre las páginas víctimas a desalojar.
Parámetro de configuración
Los siguientes parámetros de configuración se utilizan para controlar la eficacia del proceso de desalojo para mantener el uso de memoria por debajo de la cuota asignada.
evictSweepInterval: Intervalo de tiempo en segundos en el que el desalojo periódico barrerá las páginas índice para construir el conjunto de trabajo. Por defecto, el barrido se ejecuta cada 600 segundos. Esto puede ser incrementado por el cliente si desea mantener más memoria utilizada. Los siguientes comandos son un ejemplo para aumentar este intervalo a 1200 segundos.
1 2 |
$ rizo -u <nombre de usuario>:<contraseña> <dirección>:9102/ajustes -d '{"indexer.plasma.mainIndex.evictSweepInterval":1200}' $ rizo -u <nombre de usuario>:<contraseña> <dirección>:9102/ajustes -d '{"indexer.plasma.backIndex.evictSweepInterval":1200}' |
Estadísticas
Las siguientes estadísticas de almacenamiento son útiles para analizar la efectividad del uso de la memoria de almacenamiento. Basándose en estas estadísticas, los parámetros de configuración de desalojo anteriores pueden ajustarse para obtener una configuración de uso de memoria eficaz.
cache_hit_ratio: Es la relación entre los aciertos de la caché y el número total de intentos de lectura de una página basados en la actividad de los últimos 5 segundos. Cuanto mayor sea el porcentaje de aciertos en caché, mejor, ya que pasar a disco es caro.
rcache_hit_ratio: Similar a la estadística cache_hit_ratio pero sólo para escaneos
ratio_residentes: Esta estadística es la fracción de registros de página que ya están en memoria. Varía en función del conjunto de trabajo del índice. Si este valor es pequeño y el cache_hit_ratio es alto, significa que el conjunto de trabajo es pequeño.
Hola Srinath, este es un artículo muy bueno para entender la GSI basada en plasma. Sólo tengo una pregunta. Es el sweepinterval 600 segundos o 300. En el config.go, veo que se establece en 300 segundos
"indexer.plasma.mainIndex.evictSweepInterval": ConfigValue{
300,
"Intervalo de tiempo para barrer todas las páginas de un índice (en segundos)",
300,
false, // mutable
false, // no distingue mayúsculas de minúsculas
},