MySQL 處理某個idb表空間文件過大


發現MySQL 中一個表xxx只有6條數據,但idb空間卻占了40G。
查看是否獨立表空間:
mysql> show variables like 'innodb_file_per_table';

原因:MySQL執行命令delete語句時,如果包括where條件,並不會真正的把數據從表中刪除,而是將數據轉換成了碎片,通過下面的命令可以查看表中的碎片數量和索引等信息:
mysql> show table status like  'table_name';

查詢結果中:
Index_length 代表索引的數量
Data_free 代表碎片數量

然后執行下面命令進行優化整理:
mysql > optimize table table_name;

再次查看idb文件已經很小了

這里mysql給的提示是
Note>> Table does not support optimize, doing recreate + analyze instead
Status>> OK
也就是說 optimize table 對於innodb來說,無法作為a single operation,實際的操作是:
ALTER TABLE  table_name  ENGINE=InnoDB;
ANALYZE TABLE table_name;
MySQL5.7已經推薦對於InnoDB的table使用  alter table table_name engine=innodb;  語句的方式來進行表碎片優化。

注:optimize會進行鎖表操作,所以進行優化時要避開表數據操作時間,避免影響正常業務的進行。


免責聲明!

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



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