El motor de almacenamiento InnoDB tiene las siguientes limitaciones.

Limitaciones del esquema

  • Las tablas InnoDB pueden tener un máximo de 1017 columnas. Esto incluye columnas generadas virtuales.
  • Las tablas InnoDB pueden tener un máximo de 64 índices secundarios.
  • Un índice de varias columnas en InnoDB puede utilizar un máximo de 16 columnas. Si intenta crear un índice de varias columnas que utiliza más de 16 columnas, MariaDB devuelve un error 1070.

Limitaciones de tamaño

  • Con la excepción de las columnas de longitud variable (es decir, VARBINARIO, VARCHAR, BLOB y TEXTO), las filas en InnoDB tienen una longitud máxima de aproximadamente la mitad del tamaño de página para tamaños de página de 4 KB, 8 KB, 16 KB y 32 KB.
  • El tamaño máximo de las columnas BLOB y TEXT es de 4 GB. Esto también se aplica a LONGBLOB y LONGTEXT.
  • MariaDB impone un límite de tamaño de fila de 65 535 bytes para los tamaños combinados de todas las columnas. Si la tabla contiene columnas BLOB o TEXT, estas solo cuentan entre 9 y 12 bytes en este cálculo, dado que su contenido se almacena por separado.
  • Los sistemas operativos de 32 bits tienen un límite máximo de tamaño de archivo de 2 GB. Cuando trabaje con tablas grandes usando esta arquitectura, configure InnoDB para usar archivos de datos más pequeños.
  • El tamaño máximo de los archivos de registro de InnoDB combinados es de 512 GB.
  • Con los espacios de tabla, el tamaño mínimo es de 10 MB, el máximo varía según el tamaño de página de InnoDB.
Tamaño de página de InnoDB Tamaño máximo del espacio de tabla
4 KB 16 TB
8 KB 32 TB
16 KB 64 TB
32 KB 128 TB
64 KB 256 TB

Tamaños de página

Con la variable de sistema innodb_page_size, puede configurar el tamaño en bytes para las páginas InnoDB. Las páginas tienen un valor predeterminado de 16 KB. Existen ciertas limitaciones sobre cómo se usa esta variable.

  • Las instancias de MariaDB que usan un tamaño de página no pueden usar archivos de datos o archivos de registro de una instancia que usa un tamaño de página diferente.
  • Cuando se utiliza un tamaño de página de 4 KB o 8 KB, el índice máximo key la longitud se reduce proporcionalmente.
Tamaño de página de InnoDB Longitud de la clave de índice
4 KB 768B
8 KB 1536B
16 KB 3072B

Tamaño de prefijo grande

La variable de sistema innodb_large_prefix permite grandes prefix Tamaños. Es decir, cuando está habilitado InnoDB usa el índice 3072B key prefijos para DYNAMIC y COMPRESSED formatos de fila. Cuando está deshabilitado, usa 787B key prefijos para tablas de cualquier formato de fila. Usando un índice key que exceda este límite arroja un error.

Tenga en cuenta que esta función quedó obsoleta en MariaDB 10.2. Fue eliminado en MariaDB 10.3.1.

Limitaciones de las tablas

InnoDB tiene las siguientes limitaciones específicas de la tabla.

  • Cuando emite una declaración DELETE, InnoDB no regenera la tabla, sino que elimina cada fila de la tabla una por una.
  • Cuando se ejecuta MariaDB en Windows, InnoDB almacena bases de datos y tablas en minúsculas. Cuando mueva bases de datos y tablas en formato binario de Windows a un sistema similar a Unix o de un sistema Unix a Windows, debe cambiarles el nombre para usar minúsculas.
  • Cuando se utiliza un exterior en cascada keys, las operaciones en cascada no activan los disparadores.

Análisis de tablas

MariaDB admite el uso de la instrucción SQL ANALYZE TABLE para analizar y almacenar tablas key distribución. Cuando MariaDB ejecuta esta declaración, calcula la cardinalidad del índice mediante inmersiones aleatorias en árboles de índice. Esto lo hace rápido, pero no siempre preciso, ya que no verifica todas las filas. Los datos son solo una estimación y las ejecuciones repetidas de esta declaración pueden arrojar resultados diferentes.

En situaciones donde los datos precisos de las declaraciones ANALYZE TABLE son importantes, habilite la variable de sistema innodb_stats_persistent. Además, puede utilizar la variable de sistema innodb_stats_transient_sample_pages para cambiar el número de inmersiones aleatorias que realiza.

Cuando se ejecuta ANALYZE TABLE dos veces en una tabla en la que se ejecutan declaraciones o transacciones, MariaDB bloquea la segunda ANALYZE TABLE hasta que se completa la declaración o transacción. Esto ocurre porque la instrucción o transacción bloquea la segunda instrucción ANALYZE TABLE para que no vuelva a cargar la definición de tabla, lo que debe hacer ya que la anterior se marcó como obsoleta después de la primera instrucción.

Estado de la tabla

De forma similar a la sentencia ANALYZE TABLE, las sentencias SHOW TABLE STATUS no proporcionan estadísticas precisas para InnoDB, excepto por el tamaño de la tabla física.

El motor de almacenamiento InnoDB no mantiene los recuentos de filas internos. Las transacciones aíslan las escrituras, lo que significa que las transacciones simultáneas no tendrán los mismos recuentos de filas.

Columnas de incremento automático

  • Al definir un índice en una columna de incremento automático, debe definirse de una manera que permita el equivalente de SELECT MAX(col) búsquedas en la mesa.
  • Reiniciar MariaDB puede hacer que InnoDB reutilice valores antiguos de incremento automático, como en el caso de una transacción que se revirtió.
  • Cuando las columnas de incremento automático se quedan sin valores, las instrucciones INSERT generan duplicadoskey errores.

Transacciones y bloqueos

  • Puede modificar datos en un máximo de 96 * 1023 transacciones simultáneas que generan registros de deshacer.
  • De los 128 segmentos de reversión, InnoDB asigna 32 a registros de no rehacer para transacciones que modifican tablas temporales y objetos relacionados, reduciendo el número máximo de transacciones simultáneas de modificación de datos a 96,000, de 128,000.
  • El límite es de 32.000 transacciones simultáneas cuando todas las transacciones de modificación de datos también modifican tablas temporales.
  • La emisión de una instrucción LOCK TABLES establece dos bloqueos en cada tabla cuando la variable de sistema innodb_table_locks está habilitada (el valor predeterminado).
  • Cuando confirma o revierte una transacción, se liberan todos los bloqueos establecidos en la transacción. No es necesario emitir declaraciones LOCK TABLES cuando la confirmación automática está habilitada, ya que InnoDB liberaría inmediatamente los bloqueos de la tabla.

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.