免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 21429 | 回复: 13
打印 上一主题 下一主题

查看innodb表碎片及清理 [复制链接]

论坛徽章:
1
处女座
日期:2014-01-14 13:59:48
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-08 09:28 |只看该作者 |倒序浏览
现在我有一台mysql数据库,请高手指教如何查看innodb表的碎片以及如何清理,谢谢

论坛徽章:
0
2 [报告]
发表于 2012-03-08 10:45 |只看该作者
据我所知,貌似innodb使用表空间,即使有碎片也看查不出来。
只能定期的optimize table来清理碎片。

论坛徽章:
1
处女座
日期:2014-01-14 13:59:48
3 [报告]
发表于 2012-03-08 10:48 |只看该作者
optimize table这个语句是不是只能对myisam表有用??

论坛徽章:
0
4 [报告]
发表于 2012-03-08 11:04 |只看该作者
对innodb也有用,系统会自动把它转成 alter table 的形式。

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
5 [报告]
发表于 2012-03-08 11:24 |只看该作者
定期检查mysql中 `information_schema`.`TABLES`字段,查看 DATA_FREE 字段,大于0话,就表示有碎片

ALTER TABLE table_name ENGINE = Innodb;

论坛徽章:
1
处女座
日期:2014-01-14 13:59:48
6 [报告]
发表于 2012-03-08 14:16 |只看该作者
查了下`information_schema`.`TABLES`字段,查看 DATA_FREE 字段,绝大多数表的此字段的值都为635093123072,难道碎片有这么大??请高手指导

论坛徽章:
0
7 [报告]
发表于 2012-03-08 15:12 |只看该作者
回复 6# mlxahcf


    这个查询结果,和show table status from your database\G;
从你的来看,这些表是用的innodb,而且是共享表空间的,这么大的空间,其中有一部分是undo 空间,
是可用的,只是mysql不会回收。

innodb的alter table engine=innodb,虽然是空操作,记得是lock表,而且是重新建表的。
所以生产系统的,大表空间的,操作要慎重
在主从架构中,此操作也会被复制到Slave上,影响slave的

可以在执行时SET SQL_LOG_BIN=0,记此操作不被记录到binlog中

2, innodb的独立表空间,此操作比较方便,可以对比.ibd文件
3,mysiam就是上面所说的操作,show table status中的data free字段能正常反应出来碎片情况。  

论坛徽章:
0
8 [报告]
发表于 2012-03-08 15:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2012-03-08 17:10 |只看该作者
回复 8# kerlion


    有相关经验吗? 可以分享呢!!
上次在项目中,我提过这种方案,但是担心崩溃,所以一直没有搞

论坛徽章:
0
10 [报告]
发表于 2012-03-09 11:02 |只看该作者
在我们的项目中,生产环境一律采用独立的表空间,对于小表的话直接用ALTER TABLE table_name ENGINE = Innodb;回收表空间,对于大表就不能直接采用这种方式,因为会造成长时间的所表。可以采用新建表转移数据,然后删除旧表的形式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP