Anatomía del Motor WiredTiger: Árboles B+ en Memoria, Concurrencia MVCC, Eviction Threads y Oplog Idempotente (55 min)
Anatomía del Motor WiredTiger: Árboles B+ en Memoria, Concurrencia MVCC, Eviction Threads y Oplog Idempotente
1. Arquitectura de Memoria de WiredTiger y Regla del 50% de RAM
El motor de almacenamiento WiredTiger gestiona dos niveles de caché en el nodo: 1. WiredTiger Internal Cache: Por defecto reserva $\max\left(0.5 \times (\text{RAM} - 1\text{ GB}), \; 256\text{ MB}\right)$, donde las páginas de los árboles B+ residen descomprimidas y con estructuras de listas de actualización MVCC (Update Restore Chains) por documento. 2. OS Filesystem Page Cache: El resto de la RAM libre del kernel Linux almacena los bloques de disco comprimidos (Snappy / Zstandard), evitando lecturas físicas a NVMe cuando una página es desalojada del caché interno de WiredTiger.
flowchart LR
WR["Write Operation (insert/update)"] --> MEM["WiredTiger In-Memory B+Tree Page (Dirty)"]
WR --> JRN["Write-Ahead Journal Buffer (Flush cada 50-100ms o j:true)"]
WR --> OPL["local.oplog.rs (Idempotent Replication Stream)"]
MEM -->|Checkpoint cada 60s| DSK["Data Files *.wt (Bloques Comprimidos Zstd + Nuevo Root Pointer)"]
2. Umbrales Críticos de Desalojo (Dirty Cache Eviction Stalls)
- eviction_Dirty_target = 5%: Los hilos de fondo de WiredTiger comienzan a escribir páginas sucias a disco de forma asíncrona.
- eviction_dirty_trigger = 20%: Peligro SRE: Los hilos de aplicación de los clientes son forzados a detener sus operaciones y ayudar a limpiar páginas sucias (Application Thread Stalls), disparando la latencia p99 de $2\text{ ms}$ a $> 800\text{ ms}$.'