MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3042|回复: 2
打印 上一主题 下一主题

MySQL碎片管理疑问

[复制链接]
跳转到指定楼层
1#
发表于 2013-4-11 08:43:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我有一张不断增长的innodb表,已经做了哈希分区,目前两亿多数据,对该表只有delete、insert操作,会产生部分碎片,目前需要规划下碎片怎么管理清理,请问各位大侠对于大数据量的数据碎片一般是怎么处理?

另网上查资料,大部分都如 http://pengbotao.cn/mysql-suipian-youhua.html 这样说,但我试验下对于6千万数据
ALTER TABLE table_name ENGINE = Innodb; 语句耗时1个多小时,所以对于两亿多的数据来说,现网操作感觉有点不切实际

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
2#
发表于 2013-4-11 10:26:02 | 只看该作者
当然两亿条数据在现网操作实在是太不切实际了。

那么探讨一下:
经过一段时间的运行,大量的增删会给表产生碎片。

如何判断:正如文章中所提示,我们不仅仅只看DATA_FREE,更多看看实际数据库总体大小情况,然后跟实际数据库文件在磁盘的大小来对比。设置一个百分比,如果超过我们的设置,认为碎片过多,需要优化。
  1. 数据库大小:
  2. SELECT count(*) TABLES,table_schema,
  3. concat(round(sum(table_rows)/1000000,2),'M') rows,
  4. concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA,
  5. concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx,
  6. concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size,
  7. round(sum(index_length)/sum(data_length),2) idxfrac
  8. FROM information_schema.TABLES
  9. GROUP BY table_schema
  10. ORDER BY sum(data_length+index_length) DESC LIMIT 10;
复制代码
当然也可以正对某个表大小做对比,单独dump出某个表,然后和数据库中的统计做对比:
  1. 某数据库中表大小统计:
  2. SELECT TABLE_NAME,
  3. CONCAT(ROUND(table_rows/1000000,2),'M') ROWS,
  4. CONCAT(ROUND(data_length/(1024*1024*1024),2),'G') DATA,
  5. CONCAT(ROUND(index_length/(1024*1024*1024),2),'G') idx,
  6. CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),2),'G') total_size,
  7. ROUND(index_length/data_length,2) idxfrac
  8. FROM information_schema.TABLES
  9. WHERE table_schema LIKE 'YOUDB'
  10. ORDER BY data_length+index_length DESC LIMIT 5;
复制代码
优化碎片:
好了,如果对比数据差异较大,那么就碎片量也相对较大,就需要优化了。
只说说对单个大表吧:
用dump出来,重建新表,再导入或load进数据。这个要比直接“ALTER TABLE foo ENGINE=InnoDB;”快很多。
当然此过程中需要暂停服务。
那么如何可以不暂停服务呢?做个Replication,主备机模式,先停同步,如上方法操作备机,然后打开同步,直到同步追上,切换主备。



3#
 楼主| 发表于 2013-4-11 10:58:26 | 只看该作者
<高性能mysql>中的8.4.3 主动-被动模式下的主-主复制,可能适用于这种耗时长的操作,其他有实践操作的可以说下经验处理

点评

是本好书。  发表于 2013-4-11 11:13
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-9-20 00:16 , Processed in 0.113509 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表