Mysql公共表空间文件ibdata1介绍
文本系阅读 https://blog.csdn.net/demonson/article/details/79864225 后总结
ibdata1存了什么?
当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,但是共享表空间仍然在存储其它的 InnoDB 内部数据:
- 数据字典, 也就是 InnoDB 表的元数据
- 变更缓冲区 也就是change buffer
- 双写缓冲区 翻译成两次写缓存 更合适
- 撤销日志 也就是undolog
实际中有两个参数,可以防止空间不断扩大
innodb_ibuf_max_size 设置最大变更缓冲区,
innodb_doublewrite_file 来将双写缓冲区存储到一个分离的文件
如果有告警发现ibddata1过大怎么办?其中一个最有可能的原因是undolog太长了,非常有可能是大量未提交的活跃事务,为了保证可见性要保留大量的undolog
可以用命令 SHOW ENGINE INNODB STATUS/G 查看当前数据库概况
---TRANSACTION 36E, ACTIVE 1256288 secMySQL thread id 42, OS thread handle 0x7f8baaccc700, query id 7900290 localhost rootshow engine innodb statusTrx read view will not see trx with id >= 36F, sees < 36F
这是一个最常见的原因,一个14天前创建的相当老的事务。这个状态是活动的,这意味着 InnoDB 已经创建了一个数据的快照,所以需要在撤销日志中维护旧页面,以保障数据库的一致性视图,直到事务开始。如果你的数据库有大量的写入任务,那就意味着存储了大量的撤销页。
浙公网安备 33010602011771号