天天看点

查看表的碎片空间并优化表文件

innodb在执行删除时,只是物理上做了被删除的标记,实际上并没有从数据文件中真正删除。即,所占用的空间也没有实际释放。后台的purge线程会定期清理这些已经删除的记录和文件,但并不会回收这些已经删除的空间给操作系统,即会在数据文件中产生许多空洞,数据文件也会越来越大。

查看空洞的方法:

通过SHOW TABLE STATUS的结果,查看实际数据Data_length和空洞数据Data_free的比例。如果Data_free特别大,说明这个表需要优化了,优化方法可以使用ALTER TABLE table_name ENGINE = INNODB;

mysql> show table status like 't2'\G
*************************** 1. row ***************************
           Name: t2
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 13
 Avg_row_length: 1260
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-11-16 05:23:08
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.00 sec)      

show table status显示的每个列的意义如下:

Name:表名

Engine:存储引擎类型

Version:.frm文件的版本号?

Row_format:行格式

Rows:表中行数,INFORMATION_SCHEMA下的表是NULL

Avg_row_length:平均行长度

Data_length:Myisam表时数据文件的大小,单位字节

                      :innodb表指聚集索引分配的内存大小,以页的大小为单位

Max_data_length:myisam表数据文件的最大长度。如果给定了数据指针的大小,这是可以被存储在表中的数据的字节总数。

                               :InnoDB表未使用

Index_length:MyISAM表索引文件大小;InnoDB表二级索引的大小

Data_free:分配但未使用的字节大小

Auto_increment:AUTO_INCREMENT的下一个值

Create_time:表创建时间

Update_time:表最近更新的实际

Check_time:表最近check的实际

Collation:The table's character set and collation.

Checksum:checksum值

Create_options:CREATE TABLE的额外选项

Comment:创建表时使用的评注(或者有关为什么MySQL可以访问表信息的说明)。