使用delete
语句删除数据时,delete
语句只是将记录的位置或数据页标记为了“可复用”,但是磁盘文件的大小不会改变,即表空间不会直接回收。此时您可以通过optimize table
语句释放表空间。
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
MySQL可以通过optimize table
语句释放表空间,重组表数据和索引的物理页,减少表所占空间和优化读写性能。但是执行optimize table
语句过程时,数据会复制到新建的临时表中,会增加实例的磁盘使用率。当实例剩余磁盘不足以容纳临时表时,建议先扩容磁盘空间,如何扩容请参见变更配置。
说明:
- 如果您没有使用
delete
语句进行大量删除表数据的操作,使用optimize table
语句也无法降低表空间的使用率。optimize table
语句会导致锁表,建议在业务低峰期操作。- 仅Innodb和MyISAM引擎支持
optimize table
语句。
optimize table [$Database1].[Table1],[$Database2].[Table2]
说明:
- [$Database1]与[$Database2]为数据库名,[Table1]与[Table2]为表名。
- 在innodb引擎中执行
optimize table
语句时,会出现以下提示信息,该信息是正常执行返回的结果,您可忽略信息。确认返回“ok”即可。详情请参见OPTIMIZE TABLE Statement。Table does not support optimize, doing recreate + analyze instead
如果您不是因为进行大量删除表的操作导致表空间使用率增大,可以参见以下文档进行处理: