top
Loading...
A.2.11.表已滿
A.2.11. 表已滿

表已滿錯誤出現的方式有數種:

·         你正在使用低于3.23版的MySQL服務器,而且“內存中”臨時表超過了tmp_table_size字節。要想避免該問題,可使用“-O tmp_table_size=val”選項以便mysqld增加臨時表的大小,或在發出有問題的查詢之前,使用SQL選項SQL_BIG_TABLES請參見13.5.3節,“SET語法”。

也可以使用“--big-tables”選項啟動mysqld。它與使用針對所有查詢的SQL_BIG_TABLES完全相同。

MySQL 3.23起,該問題應不再出現。如果“內存中”臨時表超過tmp_table_size,服務器會自動將其轉換為基于磁盤的MyISAM表。

·         你正在使用InnoDB表,并超出了InnoDB表空間。在該情況下,解決方法是增加InnoDB表空間。請參見15.2.7節,“添加和刪除InnoDB數據和日志文件”。

·         你正在僅支持2GB文件的操作系統上使用ISAMMyISAM表,數據文件或索引文件達到了該限制值。

·         你正在使用MyISAM表,而且表所需的空間超過內部指針允許的大小。如果在創建表時未指定MAX_ROWS表,MySQL將使用myisam_data_pointer_size系統變量。默認值為6字節,它足以容納65536TB數據。請參見5.3.3節,“服務器系統變量”。

使用該語句,可檢查最大數據/索引大小:

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;

僅應為具有BLOBTEXT列的表指定AVG_ROW_LENGTH在該情況下,MySQL不能僅根據行數優化所需的空間。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/problems.html
北斗有巢氏 有巢氏北斗