最近的數據庫集群剩余容量不足,又開始了數據結轉之路,主要干兩件事情
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.tables
的DATA_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') ASDATA_FREE
FROM information_schema.tables t WHERE t.TABLE_SCHEMA = 'XX_db_name'DATA_FREE列展示的就是碎片的大小,單位是M