El archivo ibdata1
es el espacio de tabla del sistema para la infraestructura de InnoDB.
Contiene varias clases de información vital para InnoDB
- Páginas de datos de tabla
- Páginas de índice de tabla
- Diccionario de datos
- Datos de control de MVCC
- Deshacer espacio
- Segmentos de reversión
- Memoria intermedia de doble escritura (páginas escritas en segundo plano para evitar el almacenamiento en caché del sistema operativo)
- Insertar búfer (cambios en los índices secundarios)
Tenga en cuenta el lugar de ibdata1 en el universo InnoDB (en el lado derecho)
Puede separar las páginas de datos e índices ibdata1
habilitando innodb_file_per_table . Esto hará que cualquier tabla InnoDB recién creada almacene datos e páginas de índice en un .ibd
archivo externo .
Ejemplo
- datadir es / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
crea /var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table habilitado, Páginas de datos / índice almacenadas en
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table deshabilitado, Páginas de datos / índice almacenadas en ibdata1
No importa dónde esté almacenada la tabla InnoDB, la funcionalidad de InnoDB requiere buscar metadatos de tabla y almacenar y recuperar información MVCC para admitir el cumplimiento de ACID y el aislamiento de transacciones .
Aquí están mis artículos anteriores sobre la separación de datos de tablas e índices de ibdata1
QUE HACER SIGUIENTE
Puede continuar teniendo ibdata1 almacenado todo, pero eso hace que hacer instantáneas LVM sea un trabajo pesado (mi opinión personal).
Debe usar la publicación My StackOverflow y reducir ese archivo de forma permanente.
Por favor ejecute esta consulta:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Esto le dirá cuánto espacio desperdiciado puede recuperarse después de aplicar la limpieza de InnoDB.