Resumen del espacio de tablas independiente y el espacio de tablas compartido de MySQL

Resumen del espacio de tablas independiente y el espacio de tablas compartido de MySQL

Este artículo es una revisión de estos artículos:
http://blog.itpub.net/69955379/viewspace-2783174/
https://www.ycbbs.vip/?p=35673

1. Espacio de mesa independiente y espacio de mesa compartido

Para el motor de almacenamiento InnoDB, puede almacenar cada tabla en un espacio de tabla independiente, es decir, tablename.ibdun archivo; también puede almacenar datos en ibdataun espacio de tabla compartido, generalmente denominado como ibdataX, seguido de X que es un número específico.

  • ¿Cómo verificar si el espacio de tabla independiente está habilitado? :

    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    1 row in set (0.01 sec)
    
    
    • ON significa que se ha abierto el espacio de tabla independiente, en este momento en el directorio data-dir de MySQL
      • Cada tabla se almacenará como un archivo independiente. Cada tabla tiene un .frmarchivo de descripción de tabla (esto es consistente con el motor MyISAM) y un .ibdarchivo que incluye el contenido de datos y el contenido de índice de una sola tabla. De manera predeterminada, su ubicación de almacenamiento es también en la ubicación de la mesa.
    • APAGADO significa cerrar el espacio de tabla independiente, es decir, usar el espacio de tabla compartido. En este momento, solo habrá un archivo ibdata1 en el directorio MySQL data-dir, y todas las tablas se almacenarán en un archivo.
    • Cabe señalar que innodb_file_per_tablesi modifica la tabla antes de crearla y luego la modifica después de crearla, no afectará la estructura de la tabla existente.

1.1 Ventajas y desventajas del espacio de tablas independiente y el espacio de tablas compartido

espacio de tabla separado

  • Ventaja

    1. Cada mesa tiene su propio espacio de mesa independiente.
    2. Los datos e índices de cada tabla se almacenan en su propio tablespace.
    3. Es posible mover una sola tabla en diferentes bases de datos (porque cada tabla tiene un archivo de tabla de datos independiente).
    4. El espacio se puede recuperar (a través de la tabla de optimización y otros comandos).
    5. No importa cómo lo elimine, la fragmentación del espacio de tablas no afectará seriamente el rendimiento del sistema.
    6. Si innodb_file_per_table no está habilitado, los datos se colocarán en el espacio de tablas del sistema, con un máximo de 64 TB. Si se usa innodb_file_per_table, cada tabla puede tener 64 TB.
  • defecto

    1. El espacio en el tablespace solo puede ser utilizado por esta tabla
    2. La operación fsync debe ejecutarse en cada tabla
    3. mysqld debe mantener un identificador de archivo abierto, demasiadas tablas afectarán el rendimiento. (consume mucha fd)

espacio de tabla compartido

  • Ventaja

    1. El espacio de tablas se puede dividir en varios archivos y almacenar en cada disco (el tamaño del archivo de espacio de tablas no está limitado por el tamaño de la tabla, por ejemplo, una tabla se puede distribuir en diferentes archivos).
  • defecto

    1. Todos los datos e índices se almacenan en un archivo, lo que significa que hay un archivo grande (aunque un archivo grande se puede dividir en varios archivos pequeños), pero varias tablas e índices se mezclan en el espacio de tablas, de modo que cuando una tabla tiene se ha eliminado mucho, habrá muchos espacios vacíos en el espacio de la tabla, especialmente para aplicaciones como el análisis estadístico y los sistemas de registro, es muy inadecuado usar el espacio de la tabla compartida (por ejemplo, cuando el espacio del sistema no es suficiente), esperamos liberar algo de espacio en la tabla eliminando algunos datos no válidos. En este momento, encontraremos que si se usa el espacio de la tabla compartida, incluso si se eliminan los datos no válidos, el espacio de la tabla aún no se reducirá).

    2. La gestión del espacio de tabla compartido causará el problema de que el espacio de tabla no se puede retraer después de la asignación. Cuando el índice temporal o la tabla temporal hacen que el espacio de tabla se expanda, incluso si se elimina la tabla relacionada, no hay forma de retraer esa parte del espacio de tabla. espacio.

    3. Para el segundo problema, generalmente use mysqldump para exportar datos, luego elimine el archivo de datos del espacio de tabla compartido y luego vuelva a importar.

    4. Dado que los datos de varias tablas se guardan en un archivo, pueden producirse cuellos de botella de E/S durante las operaciones simultáneas, por lo que los escenarios que requieren una escritura frecuente no son adecuados para los espacios de tabla compartidos.

En proyectos reales, es mejor elegir un espacio de tabla independiente.De hecho, a partir de MySQL 5.6, un espacio de tabla independiente se ha convertido en la opción predeterminada .

1.2 Cómo convertir datos en espacios de tablas compartidos en espacios de tablas independientes

Si el tablespace compartido se creó al principio, ¿aún se puede migrar a un tablespace independiente? ¡seguro! Consulte los siguientes cuatro pasos:

  1. Use mysqldump para exportar todos los datos de la tabla de la base de datos.
  2. Detenga el servicio MySQL, modifique innodb_file_per_tablelos parámetros y elimine los archivos relacionados con InnoDB (si es una estructura maestro-esclavo, puede comenzar desde el Esclavo para completar estas operaciones).
  3. Reinicie el servicio MySQL y reconstruya el espacio de tablas compartido de InnoDB (no habrá datos en él en este momento).
  4. Vuelva a importar los datos.

Supongo que te gusta

Origin blog.csdn.net/UserFrank/article/details/124709754
Recomendado
Clasificación