Database Autonomy Service (DAS) incluye la proporción de fragmentación de memoria como factor en su función de inspección y puntuación para instancias de Redis. Este tema explica qué es la fragmentación de memoria, qué la causa, cómo medirla y cuándo tomar medidas.
Funcionamiento de la fragmentación de memoria
La fragmentación de memoria ocurre cuando hay memoria libre, pero está dividida en segmentos pequeños y no contiguos. Aunque la memoria libre total supere los N bytes, el sistema operativo no puede satisfacer una solicitud de un bloque contiguo de N bytes; esos segmentos dispersos constituyen fragmentos de memoria.
En Tair (Redis OSS-Compatible), los fragmentos de memoria no reducen la memoria disponible asignada a su instancia ni generan costos adicionales.
Por ejemplo, si una instancia de Tair (Redis OSS-Compatible) tiene 1 GB de capacidad con 700 MB en uso, los 300 MB restantes (1 GB − 700 MB) permanecen disponibles incluso si la proporción de fragmentación de memoria alcanza 2, lo que significa que los datos ocupan físicamente 2 GB de memoria del sistema.
Causas de la fragmentación de memoria
La fragmentación de memoria tiene dos causas principales.
Comportamiento del asignador de memoria (interna)
Redis admite varios asignadores de memoria: libc, jemalloc y tcmalloc. jemalloc es el predeterminado. En lugar de asignar exactamente la cantidad de memoria que solicita una aplicación, jemalloc redondea hacia arriba al límite de potencia de dos más cercano: 8 bytes, 16 bytes, 32 bytes, 2 KB, 4 KB, etc. La diferencia entre la cantidad solicitada y la asignada se convierte en un fragmento.
Rotación de pares clave-valor (externa)
Cuando se modifican o eliminan pares clave-valor, la memoria que ocupaban se libera o se redimensiona. Dado que los bloques asignados rara vez coinciden con exactitud con el nuevo tamaño de los datos, los espacios vacíos se acumulan con el tiempo.
Comprobar la proporción de fragmentación de memoria
Ejecute el siguiente comando en DAS para consultar los detalles de uso de memoria:
INFO memory
La salida incluye:
# Memory
used_memory:350458970752
used_memory_human:326.39G
used_memory_rss:349066919936
used_memory_rss_human:325.09G
…
mem_fragmentation_ratio:1.00
|
Campo |
Descripción |
|
|
Memoria que Redis solicitó para almacenar datos |
|
|
Memoria física que el sistema operativo asignó a Redis, incluida la sobrecarga por fragmentación |
|
|
Proporción actual de fragmentación de memoria |
La proporción se calcula de la siguiente manera:
mem_fragmentation_ratio = used_memory_rss / used_memory
Interpretación de la proporción
|
Proporción |
Estado |
Acción recomendada |
|
1.0–1.5 |
Normal |
No se requiere ninguna acción |
|
> 1.5 |
Alta |
La memoria fragmentada supera la mitad de la memoria utilizada; investigue y tome medidas correctivas |