Innodb表碎片整理


最近的數據庫集群剩余容量不足,又開始了數據結轉之路,主要干兩件事情

1.結轉數據,根據業務設定數據保留的時長,在時長之外的結轉

2.對結轉外的數據表進行碎片整理

因為數據結轉,會造成大量的碎片,不進行碎片整理表的存儲空間容量也是不會降下來的,因為delete的數據,這些數據占用的磁盤空間可能並不會立刻被回收

使用alter table table_name engine = innodb命令進行整理

主要是重新組織表數據和關聯索引數據的物理存儲,,相當於重建引擎,以減小存儲空間並提高訪問表時的I/O效率

整理之前,如果想查看碎片的大小,可以通過下面方法:

可以通過show table [from|in db_name] status like '%table_name%'命令查看表的容量的信息

通過 Data_length 、Rows、Avg_row_length 計算碎片的大小:

  碎片大小 = 數據總大小 - 實際表空間文件大小

  • 數據總大小 = Data_length 

  • 實際表空間文件大小 = rows * Avg_row_length 

  • 碎片大小(M) = (Data_length - (rows * Avg_row_length)) / 1024 /1024

 

通過information_schema.tablesDATA_FREE列查看表有沒有碎片:

SELECT t.TABLE_SCHEMA,
       t.TABLE_NAME,
       t.TABLE_ROWS,
       t.DATA_LENGTH,
       t.INDEX_LENGTH,
       concat(round(t.DATA_FREE / 1024 / 1024, 2), 'M') AS DATA_FREE
FROM information_schema.tables t
WHERE t.TABLE_SCHEMA = 'XX_db_name'

DATA_FREE列展示的就是碎片的大小,單位是M



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM