¿QUÉ ES UN TABLESPACE EN MYSQL?
Introducción
Un tablespace es un contenedor lógico que agrupa uno o más archivos físicos de datos, data files, donde MySQL almacena las tablas y sus índices. En lugar de guardar cada tabla en un archivo independiente, se pueden agrupar varias tablas dentro de un mismo tablespace, lo que ofrece mayor control sobre el almacenamiento, la ubicación de los archivos y el rendimiento.
Tipos de Tablespaces en MySQL
- System Tablespace: El tablespace principal de InnoDB (ibdata1).
- File-per-table: Cada tabla tiene su propio archivo ."ibd", comportamiento por defecto en versiones modernas.
- General Tablespace: Tablespaces personalizados que pueden contener varias tablas.
- Undo Tablespace: Especializados en almacenar logs de deshacer (undo logs).
- NDB Tablespace: Usados en MySQL Cluster para almacenamiento en disco.
Crear un Tablespace con ADD DATAFILE
La cláusula ADD DATAFILE se utiliza en la sentencia CREATE TABLESPACE para especificar el archivo físico donde se almacenarán los datos del tablespace.
Ejemplo 1: Tablespace General con InnoDB
CREATE TABLESPACE ts_ejemplo
ADD DATAFILE 'ts_ejemplo.ibd'
ENGINE = InnoDB;En este caso se crea un archivo llamado "ts_ejemplo.ibd" dentro del directorio de datos de MySQL (o en la ruta que indiques).
Ejemplo 2: Tablespace fuera del datadir
CREATE TABLESPACE ts_externo
ADD DATAFILE '/var/lib/mysql_datos/ts_externo.ibd'
ENGINE = InnoDB;Aquí el archivo se crea en una ubicación personalizada. Es útil para distribuir la carga de disco o utilizar discos más rápidos.
Ejemplo 3: Tablespace en NDB Cluster
CREATE TABLESPACE ts_ndb
ADD DATAFILE 'datos_ndb.dat'
USE LOGFILE GROUP lg1
INITIAL_SIZE 256M
ENGINE = NDB;En NDB, ADD DATAFILE es obligatorio al crear el tablespacey permite definir el tamaño inicial del archivo.
Añadir más Datafiles con ALTER TABLESPACE
En NDB Cluster es posible añadir archivos adicionales a un tablespace ya existente mediante ALTER TABLESPACE ... ADD DATAFILE
ALTER TABLESPACE ts_ndb
ADD DATAFILE 'datos_ndb_2.dat'
INITIAL_SIZE 128M
ENGINE = NDB;Nota importante: En InnoDB no está permitido usar ALTER TABLESPACE ... ADD DATAFILE. Un tablespace de InnoDB solo puede tener un único data file.
Asignar tablas a un Tablespace
Una vez creado el tablespace, puedes crear o mover tablas hacia él:
-- Crear una tabla dentro del tablespace
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100)
) TABLESPACE ts_ejemplo;
-- Mover una tabla existente
ALTER TABLE pedidos TABLESPACE ts_ejemplo;Ventajas de usar Tablespaces
- Control preciso de la ubicación de los datos en disco.
- Posibilidad de agrupar tablas relacionadas en el mismo archivo.
- Mejor gestión del espacio y del rendimiento de E/S.
- Facilidad para mover o respaldar grupos de tablas de forma independiente.
- Soporte de cifrado a nivel de tablespace (ENCRYPTION = 'Y').
Tipos de Tablespaces en MySQL (InnoDB)
- System Tablespace: El tablespace principal, "ibdata1". Contiene el diccionario de datos, el change buffer y, opcionalmente, tablas.
- File-per-table, por defecto: Cada tabla tiene su propio archivo .ibd dentro de la carpeta de la base de datos.
- General Tablespace: Tablespaces personalizados que pueden contener varias tablas y ubicarse en cualquier ruta.
- Undo Tablespace: Especializados en almacenar los logs de deshacer, "undo logs".
- Temporary Tablespace: Para tablas temporales.
Conclusión
El concepto de tablespace permite a los administradores de bases de datos tener un control mucho más fino sobre el almacenamiento físico de los datos. La cláusula ADD DATAFILE es la herramienta principal para definir dónde y cómo se crearán esos archivos de datos, tanto en InnoDB como en NDB.
Dominar el uso de CREATE TABLESPACE y ADD DATAFILE es fundamental cuando se trabaja con bases de datos de gran tamaño o cuando se necesita optimizar el rendimiento del almacenamiento.