赞
踩
背景
早上和一个同事讨论技术问题,谈到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性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。