天天看點

檢視表的碎片空間并優化表檔案

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可以通路表資訊的說明)。