Ein Fehler wegen voller Tabelle kann aus mehreren Gründen auftreten:
Sie verwenden einen älteren MySQL Server als 3.23 und eine
arbeitsspeicherresidente temporäre Tabelle wird größer
als tmp_table_size
Bytes. Um dies zu
verhindern, lassen Sie mysqld mithilfe
der Option
--tmp_table_size=
die Größe der temporären Tabellen heraufsetzen oder
setzen die SQL-Option val
SQL_BIG_TABLES
,
bevor Sie die problematische Anfrage absetzen. Siehe
Abschnitt 13.5.3, „SET
“.
Sie können auch mysqld mit der Option
--big-tables
starten. Das ist genau
dasselbe, als würden Sie SQL_BIG_TABLES
für sämtliche Anfragen verwenden.
Seit MySQL 3.23 sollte dieses Problem erledigt sein. Wenn
eine speicherresidente temporäre Tabelle größer als
tmp_table_size
wird, macht sie der Server
automatisch zu einer MyISAM
-Tabelle auf
der Festplatte.
Sie verwenden InnoDB
-Tabellen und haben
keinen Platz mehr im InnoDB
-Tablespace.
In diesem Fall müssen Sie den
InnoDB
-Tablespace vergrößern. Siehe
Abschnitt 14.2.7, „Hinzufügen und Entfernen von InnoDB-Daten- und -Logdateien“.
Sie verwenden ISAM
- oder
MyISAM
-Tabellen auf einem Betriebssystem,
das nur maximal 2 Gbyte große Dateien zulässt, und Ihre
Daten- oder Indexdatei übersteigt dieses Limit.
Sie benutzen eine MyISAM
-Tabelle, die
mehr Platz braucht, als die interne Zeigergröße gestattet.
Wenn Sie nicht beim Anlegen der Tabelle die Tabellenoption
MAX_ROWS
gesetzt haben, verwendet MySQL
die Systemvariable
myisam_data_pointer_size
. Deren
Standardwert beträgt 6 Byte, genug, um 256-Tbyte- Daten
zuzulassen. Siehe Abschnitt 5.2.2, „Server-Systemvariablen“.
Die Größenlimits für Daten- und Indexdatei prüfen Sie mit folgender Anweisung:
SHOW TABLE STATUS FROM database LIKE 'tbl_name
';
Sie können auch myisamchk -dv /path/to/table-index-file benutzen.
Ist die Zeigergröße zu klein, können Sie dies mit
ALTER TABLE
ändern:
ALTER TABLEtbl_name
MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn
;
Den Wert AVG_ROW_LENGTH
müssen Sie nur
für Tabellen mit BLOB
- oder
TEXT
-Spalten angeben; in diesem Fall kann
MySQL den Platzbedarf nicht anhand der Zeilenzahl
optimieren.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.