免费注册 查看新帖 |

Chinaunix

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

遇到一个InnoDB的tablespace文件大小疯涨的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-27 13:06 |只看该作者 |倒序浏览
10可用积分
请教有没有哪位同学遇到下面类似的问题?

配置innodb_file_per_table参数后,每个表单独一个.ibd文件,之前运行一个多月都很正常,ibdata也一直在初始设置的200M没有太大变化;
最近两天突然出现ibdata疯涨的情况,几个小时内就能达到几十个G,单个表空间.ibd文件不再增长,而整个数据库才不到30多G,同时发现在晚上访问压力比较小的时候ibdata增长就会变慢。
根据MySQl官方文档,配置innodb_file_per_table后,ibdata只存放internal data dictionary和undo logs,在数据字典基本没有变化,脏数据只占49%的情况(327417*16/1024/1024=5G),不应该出现iddata1疯涨的现象。
检查另外一台Replication从库没有这个现象,就试着把从库切为主库,这时这个现象就立即重现了。

MySQL运行环境如下:
CentOS5 + 16G内存 + MySQL版本5.4.1
PS.因有个表比较大,数据量千万级记录,索引大小为6G左右,采用了MySQL的partition来提升效率。

InnoDB配置如下:
innodb_data_file_path               = ibdata:200M:autoextend:max:80000M
innodb_buffer_pool_size             = 10G
innodb_additional_mem_pool_size     = 50M
innodb_thread_concurrency           = 0
innodb_flush_log_at_trx_commit      = 2
innodb_max_dirty_pages_pct          = 90
innodb_lock_wait_timeout            = 50
innodb_log_group_home_dir           = /db/mysql541/logs
innodb_log_files_in_group           = 2
innodb_log_file_size                = 256M
innodb_log_buffer_size              = 8M
innodb_status_file                  = 1
sync-binlog=1
innodb_file_per_table

论坛徽章:
0
2 [报告]
发表于 2009-09-27 13:11 |只看该作者
innodb_data_file_path               = ibdata:200M:autoextend:max:80000M


80000M这个是80G?

论坛徽章:
0
3 [报告]
发表于 2009-09-27 14:50 |只看该作者

回复 #1 iask 的帖子

No good idea.if you want to solve this problem,please first make a backup of your Mysql and Database,and then edit options about innodata storage engine in my.cnf.

restore mysql,restart your Mysql.

论坛徽章:
0
4 [报告]
发表于 2009-09-27 14:58 |只看该作者

回复 #1 iask 的帖子

买个T级别的存储。不怕它增长。

论坛徽章:
0
5 [报告]
发表于 2009-09-27 15:27 |只看该作者
原帖由 ziggler 于 2009-9-27 13:11 发表
innodb_data_file_path               = ibdata:200M:autoextend:max:80000M


80000M这个是80G?


是80G,设置为80G并没有特别的意义,在出现这个问题前,最大设置为8G,而ibdata大小一直是初始化的200M,没有增长,现在单表不增长,而ibdata疯涨,如果设置为800G估计不出两天也会被用光。
所以这个问题,我觉得那位叫"小木虫子"的朋友提出的建议不是解决问题的真正办法。

论坛徽章:
0
6 [报告]
发表于 2009-09-27 15:42 |只看该作者
原帖由 todayhero 于 2009-9-27 14:50 发表
No good idea.if you want to solve this problem,please first make a backup of your Mysql and Database,and then edit options about innodata storage engine in my.cnf.

restore mysql,restart your Mysql.



我一直认为我遇到的这个问题跟innodb的Doublewrite buffer机制有关,但是没有深入研究过,希望对这方面有经验的朋友一起过来讨论下。

[ 本帖最后由 iask 于 2009-11-20 10:29 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-09-27 15:47 |只看该作者
关注ING

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
8 [报告]
发表于 2009-09-27 17:06 |只看该作者
原帖由 iask 于 2009-9-27 15:42 发表



没有明白你说的 innodata storage engine指的是什么?能说的详细点么!
我一直认为我遇到的这个问题跟innodb的Doublewrite buffer机制有关,但是没有深入研究过,希望对这方面有经验的朋友一起过来讨论下。



google了一把,发现很多人也有相同的问题,但是没有很好的解决办法。
网上的建议是,export数据,restart mysql, import 数据,可以解决这个问题。

论坛徽章:
0
9 [报告]
发表于 2009-09-27 17:22 |只看该作者
我感觉这个可能是undo log 的问题,试试改改innodb_flush_method这个参数试试?

论坛徽章:
0
10 [报告]
发表于 2009-09-27 19:02 |只看该作者
原帖由 wyjs 于 2009-9-27 17:22 发表
我感觉这个可能是undo log 的问题,试试改改innodb_flush_method这个参数试试?


innodb_flush_method是确定日志及数据文件如何write、flush;
我之前试过把innodb_flush_method=O_DIRECT,对这个问题没有任何改善。只有O_DSYNC这个策略没有测试,晚上测试一下看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP