Skip to content

Arquitectura interna de InnoDB

InnoDB es el motor de almacenamiento principal de MySQL. Aporta transacciones ACID, claves foraneas, indices B-Tree, bloqueos por fila y recuperacion ante fallos.

Arquitectura conceptual

mermaid
flowchart TB
  Q["SQL layer"] --> I["InnoDB"]
  I --> BP["Buffer pool"]
  I --> LG["Redo log"]
  I --> UN["Undo logs"]
  I --> TS["Tablespaces"]
  BP --> D["Data pages"]

SQL layer y storage engine

MySQL separa:

  • Capa SQL: parser, optimizer, permisos, funciones SQL.
  • Motor de almacenamiento: lectura/escritura fisica, indices, transacciones.

InnoDB es el motor mas habitual para aplicaciones transaccionales.

Buffer pool

El buffer pool cachea paginas de datos e indices en memoria.

Variable importante:

sql
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

En servidores dedicados a MySQL, suele ser una de las configuraciones mas importantes.

Paginas

InnoDB trabaja con paginas, normalmente de 16 KB. Las filas e indices se almacenan en paginas.

Esto explica por que los indices y el orden fisico afectan lecturas.

Clustered index

En InnoDB, la primary key es el clustered index. Los datos de la fila viven ordenados por la primary key.

Si no defines primary key, InnoDB crea una interna. Es mejor definir una explicitamente.

Indices secundarios

Un indice secundario guarda la clave indexada y la primary key de la fila.

Por eso primary keys enormes aumentan el tamaño de indices secundarios.

Redo log

El redo log permite recuperar cambios confirmados tras fallo.

Flujo simplificado:

txt
cambio en memoria -> redo log -> flush a datos

Undo log

El undo log permite:

  • Rollback.
  • Lecturas consistentes mediante MVCC.

Change buffer

InnoDB puede diferir cambios de indices secundarios para optimizar escrituras.

No suele configurarse a diario, pero ayuda a entender rendimiento de escrituras.

Buenas practicas

  • Define primary keys pequenas y estables.
  • Usa InnoDB salvo razon clara.
  • Dimensiona buffer pool con datos reales.
  • Entiende que indices secundarios incluyen la primary key.
  • No optimices configuracion sin medir.