MySQL 处理某个idb表文件过大
发现MySQL 中一个表xxx只有6条数据,但idb空间却占了40G。
原因:MySQL执行命令delete语句时,如果包括where条件,并不会真正的把数据从表中删除,而是将数据转换成了碎片,通过下面的命令可以查看表中的碎片数量和索引等信息:
mysql> show table status like ‘table_name‘;
查询结果中:
Index_length 代表索引的数量
Data_free 代表碎片数量
然后执行下面命令进行优化整理:
mysql > optimize table table_name;
这里mysql给的提示是
Note>> Table does not support optimize, doing recreate + analyze instead
Status>> OK
也就是说 optimize table 对于innodb来说,无法作为a single operation,实际的操作是:
ALTER TABLE test.foo ENGINE=InnoDB;
ANALYZE TABLE test.foo;
MySQL5.7已经推荐对于InnoDB的table使用 alter table table_name engine=innodb; 语句的方式来进行表碎片优化。
注:optimize会进行锁表操作,所以进行优化时要避开表数据操作时间,避免影响正常业务的进行。
相关推荐
世樹 2020-11-11
SCNUHB 2020-11-10
bleach00 2020-11-10
ribavnu 2020-11-16
要啥自行车一把梭 2020-11-12
vitasfly 2020-11-12
康慧欣 2020-09-10
liuweiq 2020-09-09
CoderToy 2020-11-16
emmm00 2020-11-17
王艺强 2020-11-17
bianruifeng 2020-11-16
wangshuangbao 2020-11-13
苏康申 2020-11-13
vivenwan 2020-11-13
moyekongling 2020-11-13
云中舞步 2020-11-12
aydh 2020-11-12