mysql ibata文件_【MySQL】ibdata文件增大的原因

本文探讨了MySQL中ibdata文件增大的原因,包括InnoDB存储方式、长事务导致的undo段积累,以及如何通过调整参数和使用工具分析ibdata内容。建议设置innodb_file_per_table=1以单独存储表数据,并优化事务处理以控制ibdata的增长。
摘要由CSDN通过智能技术生成

背景

早上和一个同事讨论技术问题,谈到ibdata文件会随着ibdata1 存放哪些数据?

表数据/索引 (inno什么原因导致ibdata 迅速增大呢?

从ibdata1文件存放的内容来分析

我们都知道innodb的表有两种存放方式:

当innodb_file_per_table=0时也即共享表空间方式,所有表的索引/数据统一存放在一个共享表空间中ibdata1文件,随着数据量的增大,共享表空间的文件大小也迅速增长,同时空间回收困难;

当innodb_file_per_table=1时也即独占表空间方式,也就是一张表一个表空间(ibd文件),表中的索引和数据存放在独立的表空间中,执行drop/trun最终ibdata最终的大小取决于事务的大小/长短。

a 数据库系统中存在长

通过执行命令

SHOW ENGINE INNODB STATUSG

—TRAb 5.5版本之前 purge undo thread是和master thread 共用的。存在大量长事务的时候导致purge undo的速度小于undo segment产生的速度。通过 innodb 参数 History

————

TRANSACTIONS ———— Trx id counter 43831607347 Purge done for trx’s n:o < 43831607342 undo n:o < 0 state: running but idle History list length 2308 LIST OF TRANSACTIONS FOR EACH SESSION:

History list length  2308 表示有 2308个事务没有清理,过大的值意味着purge thread 速度达到了瓶颈。5.5 版本开始MySQL 将purge thread 和master thread 分开,我们可以通过调整参数来加快purge undo的速度。

# yz

Variable_name                Value

innodb_max_purge_lag          0

innodb_max_purge_lag_delay    0

innodb_purge_batch_size       300

innodb_purge_threads          12

如何查看ibdata文件中的内容呢?

MySQL 官方并没有提供工具查ibata存储了什么内容,不过我们可以通过如下两种工具

innochecksum,(感谢  Mark Callaghan)。

./innochecksum /var/

0     bad checksum

13    FIL_PAGE_INDEX

19272 FIL_PAGE_UNDO_LOG --占用了总ibdata1 的93%

230   FIL_PAGE_INODE

1     FIL_PAGE_IBUF_FREE_LIST

892   FIL_PAGE_TYPE_ALLOCATED

2     FIL_PAGE_IBUF_BITMAP

195   FIL_PAGE_TYPE_SYS

1     FIL_PAGE_TYPE_TRX_SYS

1     FIL_PAGE_TYPE_FSP_HDR

1     FIL_PAGE_TYPE_XDES

0     FIL_PAGE_TYPE_BLOB

0     FIL_PAGE_TYPE_ZBLOB

0     other

3     max index_id

从上面的分析来看 undo log占用了总ibdata1 的93%。

第二个工具:innodb_space (  made by Jeremy Col)可以清晰地分析出ibdata1的组成(该工具需要bindata环境)

# innodb_space -f /var/lib/mysql/ibdata1 space-summary | | wc -l

19272

如何解决 ibdata1 不停的增大呢?

坦白的说我们没有方法阻止其不停的增大,但是我们可以使用

1 规范

参考资料

[1] Reasons for run-away main Innodb Tablespace

[2] Why is the ibdata1 file continuously growing in MySQL?

[3]

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值