innodb删除表已满

时间:2014-02-01 14:21:49

标签: mysql sql innodb

我有问题女巫删除innodb中的记录(表有somitem 100k rekords或1mln记录) Innodb每个表都有文件 我不知道为什么会这样。 总是我可以删除一些记录,接下来我看到“表格已满”...几秒后我可以删除更多记录..

mysql> DELETE from xxxx WHERE id > 1413139758 AND id <= 1413819239 LIMIT 10000;
Query OK, 10000 rows affected (0.30 sec)

mysql> DELETE from xxxx WHERE id > 1413139758 AND id <= 1413819239 LIMIT 10000;
ERROR 1114 (HY000): The table 'xxxx' is full

1 个答案:

答案 0 :(得分:4)

即使您有每个表的文件,但删除行会导致旧版本的行被复制到中央表空间ibdata1。如果您回滚删除,或者有其他事务在读取数据库时需要查看您删除的行以保留其可重复读取的数据库视图。

几秒后它清除的原因是InnoDB逐渐清除这些过时行的副本,并在ibdata1中腾出空间。

通常,如果ibdata1需要在其回滚段中存储更多数据,则可以自动扩展。您是否在没有autoextend关键字的情况下配置了ibdata1?

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:10M:autoextend |
+-----------------------+------------------------+

如果没有autoextend关键字,ibdata1文件的大小固定,删除大量行时可以非常轻松地填充它。

另请参阅:https://dba.stackexchange.com/questions/43503/how-to-solve-the-table-is-full-with-innodb-file-per-table