Hay varias maneras en que puede producirse un error de tabla llena:
Cuando utiliza un servidor MySQL anterior a la versión 3.23 y una tabla temporal en memoria
se hace más grande de tmp_table_size bytes. Para evitar este problema puede utilizar
la opción -O tmp_table_size=# para hacer que mysqld
incremente el valor temporal del tamaño de tablas, o utilizar la opción SQL_BIG_TABLES
antes de ejecutar la consulta problemática. Consulte
Sección 13.5.3, “Sintaxis de SET”.
También puede iniciar mysqld con la opción --big-tables. Esto es
exactamente lo mismo que utilizar la opción SQL_BIG_TABLES para todas las consultas.
A partir de MySQL 3.23, este problema no debería ocurrir. Si una tabla
en memoria se hace más grande que tmp_table_size, el servidor automáticamente
la convierte en una tabla de disco MyISAM.
Está utilizando tablas InnoDB y se quedó sin espacio en el espacio de tablas
InnoDB. En este caso, la solución es aumentar el espacio de tablas InnoDB.
Consulte Sección 15.7, “Añadir y suprimir registros y ficheros de datos InnoDB”.
Está utilizando tablas ISAM o MyISAM en un sistema operativo que
tan solo soporta hasta 2GB de tamaño de archivo, habiendo superado ya este límite para el archivo de datos o de índices.
Está utilizando una tabla MyISAM, y el espacio requerido por la tabla excede a lo que permite
el tamaño de puntero interno. Si no especifica la opción de tabla MAX_ROWS cuando cree una tabla,
MySQL utiliza la variable de sistema myisam_data_pointer_size. Desde MySQL 5.0.6 en adelante,
el valor por defecto es de 6 bytes, que es suficiente para permitir 65536 TB de datos. Antes de MySQL 5.0.6, el valor
por defecto es de 4 bytes, que solo es suficiente para permitir 4 GB de datos. Consulte Sección 5.3.3, “Variables de sistema del servidor”.
Puede comprobar los tamaños máximos de datos e índices mediante esta consulta:
SHOW TABLE STATUS FROM database LIKE 'nombre_tabla';
También puede utilizar myisamchk -dv /ruta/a/archivo-indice-de-tabla.
Si el tamaño del puntero es demasiado pequeño, puede corregir el problema utilizando ALTER TABLE:
ALTER TABLEnombre_tablaMAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
Tiene que especificar AVG_ROW_LENGTH solo para tablas con columnas
BLOB o TEXT; en este caso, MySQL no puede optimizar el espacio
requerido basándose únicamente en el número de filas.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
