MySQL数据库表空间回收问题
2020-07-16 本文已影响0人
frankie_cheung
innodb_file_per_table参数
innodb_file_per_table该参数设置为on则代表数据库的表每个都以后缀为.ibd的文件储存。
drop table可以删除整个表,释放表空间
delete删除在数据库层面的理解
假如你在delete一条数据,innodb只会把删除的该条记录标记为已删除,所以在物理文件中并没有删除,假如再插入数据时,这个已经被标记的位置会复用,即可以给后来者作为一个写入的空间。
我们知道MySQL中innodb引擎的存储是按照页的格式存贮的,示例如下:
image.png
一行记录删除后,会被复用,当一整个数据页被删除后,也会复用。
且可以被用于任何位置。
延展理解
其实数据库的表远没有Linux df -h的那么大,因为出现一些删除和插入,更新操作,导致数据库某些页或者某些记录被标记为可复用,但是数据库的物理文件尚未释放这些空间