我有一个数据库,其中大部分表都存储在 InnoDB 引擎上,但是前几天发出的警报显示 ibdata1 文件呈指数增长。
对于我到目前为止搜索的内容,除了重新开始并重建整个数据库之外,我无法调整或缩小此文件的大小。
但是,我已经读过该文件增长过快的一些情况是,当有几个事务可能没有足够快地提交数据库来管理文件但让它增长时。
有没有办法查看此文件中的内容以了解占用大部分空间的内容?
此外,有没有办法对这个文件进行限制,以便我们可以控制什么时候上升,什么时候不上升?
我有一个数据库,其中大部分表都存储在 InnoDB 引擎上,但是前几天发出的警报显示 ibdata1 文件呈指数增长。
对于我到目前为止搜索的内容,除了重新开始并重建整个数据库之外,我无法调整或缩小此文件的大小。
但是,我已经读过该文件增长过快的一些情况是,当有几个事务可能没有足够快地提交数据库来管理文件但让它增长时。
有没有办法查看此文件中的内容以了解占用大部分空间的内容?
此外,有没有办法对这个文件进行限制,以便我们可以控制什么时候上升,什么时候不上升?
InnoDb ruby 是一个很棒的工具,可以完全满足您的需求。
疑难解答
如果你不使用
innodb_file_per_table
这个也可以是正常的数据增长所以先确认一下。如果您使用
innodb_file_per_table
,那么它很可能确实是撤消历史记录。您可以通过运行来确认:您也可以使用 innodb ruby 进行检查:
此命令将为您提供撤消历史记录使用的页数:
其中任何一个都只会报告当前数据。除非您在清除线程无法跟上的许多长时间打开的事务中具有一致的高负载,否则您将主要有空闲页面。随着时间的推移绘制它可能是有益的,这样您就可以了解您的服务器在做什么。
使固定
无法缩小 ibdata。您唯一能做的就是通过 mysqldump(或您选择的任何其他等效工具)转储和恢复您的数据。
其他注意事项
从 5.6.3 开始,还可以将您的撤消表空间与主 ibdata 文件(https://dev.mysql.com/doc/refman/5.6/en/innodb-undo-tablespace.html)分开。你可能会遇到一些有趣的事情。
在 5.7.5中引入了innodb_max_undo_log_size参数。