一、导致ibdata1文件大小暴涨的原因有下面几个:
- 有大量并发事务,产生大量的undo log;
- 有旧事务长时间未提交,产生大量旧undo log;
- file i/o性能差,purge进度慢;
- 初始化设置太小不够用;
- 32-bit系统下有bug。
二、解决方案:
- 升级到5.6及以上(64-bit),采用独立undo表空间,5.6版本开始就支持独立的undo表空间了,再也不用担心会把 ibdata1 文件搞大;
- 初始化设置时,把 ibdata1 文件至少设置为1GB以上;
- 增加purge线程数,比如设置
innodb_purge_threads = 8
; - 提高file i/o能力,该上SSD的赶紧上;
- 事务及时提交,不要积压;
- 默认打开
autocommit = 1
,避免忘了某个事务长时间未提交; - 检查开发框架,确认是否设置了
autocommit=0
,记得在事务结束后都有显式提交或回滚。