[关闭]
@llplmlyd 2023-04-18T16:00:14.000000Z 字数 594 阅读 187

清理数据库碎片

数据库


表碎片产生的原因

使用delete删除数据的时候,MySQL并不会把数据文件真实删除,而只是将数据文件的标识位删除,也没有整理数据文件,因此不会彻底释放表空间。换句话说,每当我们从表中删除数据时,这段被删除数据的空间就会被留出来,如果又赶上某段时间内该表进行大量的delete操作,则这部分被删除数据的空间就会越来越大。当有新数据写入时,MySQL会再次利用这些被删除的区域,但也无法彻底占用。

碎片计算方式

  1. mysql> show table status like "%employees%"\G;
  2. ...
  3. Rows: 299335
  4. Avg_row_length: 50
  5. Data_length: 15220736
  6. Max_data_length: 0
  7. Index_length: 0
  8. Data_free: 0
  9. ...

(1)碎片大小=数据总大小-实际表空间文件大小

(2)数据总大小=data_length+index_length=15220736

(3)实际表空间文件大小=rows*avg_rog_length=299335*50=14966750

(4)碎片大小=(15220736-14966750)/1024/1024=0.2M

碎片清理方法

前面两种方式会锁表 后面那种方式在执行过程中不缩锁表

alter table table_name engine=innodb

optimize table table_name

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注