表已滿錯誤出現的方式有數種:
·你正在使用低於3.23版的MySQL服務器,而且“內存中”臨時表超過了tmp_table_size字節。要想避免該問題,可使用“-O tmp_table_size=val”選項以便MySQLd增加臨時表的大小,或在發出有問題的查詢之前,使用SQL選項 SQL_BIG_TABLES。
也可以使用“--big-tables”選項啟動MySQLd。它與使用針對所有查詢的SQL_BIG_TABLES完全相同。
自MySQL 3.23起,該問題應不再出現。如果“內存中”臨時表超過tmp_table_size,服務器會自動將其轉換為基於磁盤的MyISAM表。
·你正在使用InnoDB表,並超出了InnoDB表空間。在該情況下,解決方法是增加InnoDB表空間。
·你正在僅支持2GB文件的操作系統上使用ISAM或MyISAM表,數據文件或索引文件達到了該限制值。
·你正在使用MyISAM表,而且表所需的空間超過內部指針允許的大小。如果在創建表時未指定MAX_ROWS表,MySQL將使用myisam_data_pointer_size系統變量。默認值為6字節,它足以容納65536TB數據。
使用該語句,可檢查最大數據/索引大小:
- SHOW TABLE STATUS FROM database LIKE 'tbl_name';
- 也可以使用myisamchk -dv /path/to/table-index-file。
如果指針大小過小,可使用ALTER TABLE更正該問題:
- ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
僅應為具有BLOB或TEXT列的表指定AVG_ROW_LENGTH。在該情況下,MySQL不能僅根據行數優化所需的空間。