El rendimiento de una base de datos no depende solo de cómo están escritas las consultas o diseñadas las tablas, sino también de cómo está configurado el entorno en el que corre: el servidor, la memoria disponible, los discos, y los parámetros internos del SGBD.
🔹 Configuración del SGBD (Buffers y Caches)
Un SGBD moderno utiliza múltiples mecanismos de caché y buffering para reducir el acceso al disco (que es el componente más lento del sistema).
Optimizar estos parámetros es clave para lograr un rendimiento estable.
🔸 Buffer Pool / Shared Buffers
Es el área de memoria principal que el motor usa para guardar temporalmente páginas de datos leídas desde disco.
Cuanto más grande sea (dentro de lo razonable), menos lecturas físicas se necesitarán.
📘 Ejemplo (PostgreSQL):
SHOW shared_buffers;
-- Ejemplo: 128MB
📘 Configuración típica (postgresql.conf):
shared_buffers = 25% de la RAM total
📘 Ejemplo (MySQL / InnoDB):
innodb_buffer_pool_size = 2G
💡 Idealmente, el buffer pool debe poder contener los datos más consultados (tablas “calientes”).
🔸 Cache de Consultas (Query Cache)
Almacena los resultados de consultas recientes, evitando recalcularlas.
Muy útil en aplicaciones con consultas repetitivas y pocos cambios de datos.
📘 Ejemplo (MySQL):
SET GLOBAL query_cache_size = 64M;
💡 En sistemas con muchas escrituras, puede ser contraproducente (se invalida constantemente la caché).
🔸 Write-Ahead Log (WAL) / Redo Logs
Los SGBD guardan los cambios primero en un log de escritura secuencial antes de aplicarlos al disco.
Esto garantiza durabilidad (la D de ACID) y permite recuperación tras fallos.
📘 Parámetros importantes:
wal_buffers (PostgreSQL)
innodb_log_buffer_size (MySQL)
Aumentarlos puede mejorar el rendimiento de inserciones masivas o actualizaciones en bloque.
🔸 Checkpoints
Un checkpoint es el proceso que sincroniza los datos en memoria con el disco.
Si ocurre con demasiada frecuencia, puede generar picos de I/O; si ocurre muy poco, aumenta el riesgo de recuperación más lenta.
📘 Ejemplo (PostgreSQL):
checkpoint_timeout = 5min
checkpoint_completion_target = 0.9
💡 Ajustar según la frecuencia de escritura y la capacidad de disco.