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_tabla
MAX_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.