我有一个20 of的MySQL数据库,它在一个表中包含大约3000万行数据。我想删除该表中的一列,以清除一些空间。
我通过phpMyAdmin删除了该列,它花费了大约15分钟,并检查了服务器中的磁盘使用情况。在删除了一个填充了数据的列之后,它使用了从20 to到28 to的数据。
我做错什么了吗?我漏掉了什么明显的东西吗?
当我试图删除这个专栏的时候,我什么也没做。
Update:实际上,当我转到列出phpMyAdmin中的表的数据库摘要页面时,它也会列出它们的大小。表的大小加起来只有10 up。
当我通过df -h检查服务器上使用的大小时,它说/dev/vda使用的是28 is。
服务器上唯一的其他文件是几个小型PHP文件。是什么占据了这个18 gap的空白?
发布于 2014-07-03 02:43:05
最可能的解释是,您没有使用每个表的文件模式,而包含所有表和索引的ibdata1文件在ALTER中增加了。删除列时,MySQL必须创建表的新副本,将所有数据移到其中(减去已删除的列),然后删除原始表。在此过程接近结束时,需要同时存储两个表副本(减去在一个副本中删除的列)。然后,当它完成时,它会删除原来的副本,这样的空间在将来可以被重用。
不幸的是,有没有办法缩小ibdata1。它的大小仍然相当于它的高水位标志。要恢复磁盘空间,必须:
innodb_file_per_table=1中设置my.cnf现在,每个表将占用一个单独的文件。当您修改或优化它们时,它们将恢复空间。默认情况下,在MySQL 5.6中启用此模式。
https://stackoverflow.com/questions/24544016
复制相似问题