当前位置: 首页 > 网络应用技术

MySQL删除表数据,并且磁盘空间已占据。为什么?

时间:2023-03-08 16:06:44 网络应用技术

  最近,有一个项目可以在ON -board报告中获取较低机器上的数据。由于报告的频率和大量数据,数据的增长太快了,磁盘占据了很大的数量。

  为了节省成本,定期进行数据备份,并且删除表记录将通过删除删除。

  显然,它已被删除执行,但是文件文件的大小尚未减少,这令人困惑

  该项目将MySQL用作数据库。对于表来说,它通常是表结构和表数据。表结构职业空间相对较小,通常是表数据所占据的空间。

  当我们使用DELETE删除数据时,表中的数据记录确实已删除,但是表文件的大小没有更改。

  使用MySQL的任何人都必须听说过B+树。MySQL InnoDB使用B+树作为存储数据的结构,通常被认为存储在页面中。因此,删除数据时会有两种情况:

  例如,您想删除R4的记录:

  InnoDB直接标记了R4记录以删除它,称为可复制位置。如果ID在300至700中插入,则将重新使用该位置。

  可以看出,磁盘文件的大小不会减小。

  GM删除整个页面数据,还将记录以删除标记。数据被重复使用并在该位置使用。与删除默认记录不同,整个页面记录将被删除。当稍后插入的数据不在原始范围内时,可以重复使用该位置,并且可以重复使用该位置。如果您只删除静默写作记录,则需要插入数据以符合删除记录位置之前重用。

  因此,无论是数据行的删除还是数据页的删除,都将其标记为已删除并用于重复使用,因此不会减少文件。

  删除仅删除数据标识位,并且不会整理数据文件。当插入新数据时,将再次使用作为删除徽标的这些记录空间。您可以使用“优化餐桌”

  注意:优化表仅在Myisam,BDB和InnoDB上扮演角色。

  此外,您还可以通过Alter表执行重建表

  有些人会问优化表和Alter表之间有什么区别?

  Alter表T引擎= InnoDB(即重新创建),优化表T等于重新创建+分析

  最后,让我们谈谈在线DDL。DBA的日常工作必须改变DDL。DDL更改将锁定表。可以说这是DBA心脏中的永久疼痛,尤其是DDL更改的执行,这会导致图书馆上大量线程在“等待元数据锁”状态。因此,在5.6版之后引入了在线DDL。。

  在启动在线DDL之前,有两种主要方法可以复制和内置DDL的内置方法。还调用了内置方法(快速索引创建)。与复制方法相关联,Intplopher方法不复制数据,因此它更快。在整个过程中锁定仪表作为复制方法,而实用性并不是很强大的前两种方法,在线方法不仅可以阅读,还可以支持写作操作。

  执行在线DDL语句时,请使用算法和锁定关键字。这两个关键字在我们的DDL语句的末尾,可以通过逗号分开。该示例如下:

  算法选项

  锁定选项

  执行DDL操作时,无法指定算法选项。目前,MySQL会根据即时,Inplote和copy的顺序自动选择适当的模式。您还可以指定算法=默认值,这是相同的效果。将直接报告错误。

  优化表和Alter表名称名称引擎= InnoDB支持Oline DDL,但仍建议使用

  删除数据时,相应的数据行不会真正删除。它只是将其标记为可以复制的状态,因此表空间不会变小。

  重建表,快速转动删除数据,优化表或Alter表的方法。在5.6版本之后,创建表已支持在线操作,但最好在低业务中使用它。