首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的大型ibdata文件

MySQL中的大型ibdata文件
EN

Database Administration用户
提问于 2015-03-20 06:48:56
回答 1查看 3.5K关注 0票数 1

我使用的是MySQL数据库,所有的表都是InnoDB,打开了file_per_table配置。但我仍然看到巨大的ibdata文件(~50 But )。所有表都有.ibd文件。这是我通过转储和加载创建的一台机器。这是什么原因。

EN

回答 1

Database Administration用户

发布于 2015-03-22 03:01:33

你可能有很多大的交易或者一个非常大的交易。

看看Vadim对InnoDB的图形表示

如果您查看系统表(ibdata1)内部,就会看到回滚段和撤消日志。

当回滚段回滚事务时,它必须使用它存储在撤消空间中的MVCC信息。这是大部分增长发生的地方。Percona在Jun 10, 2010 (逃出主要Innodb表空间的原因)上提到了这一点。

我以前也讨论过这个

更新2015-03-22美国东部时间15:00

如果您确信数据字典是原因,则只有一种确定的方法可以验证这一点。

  • 步骤01)获取另一个DB服务器(开发或测试)
  • 第二步)在上面安装MySQL
  • 步骤03) mysqldump只使用模式(使用--no-data)
  • (步骤04)将仅模式转储加载到空数据库中。
  • 步骤05)运行ls -l /var/lib/mysql/ibdata1 | awk '{print $5}'

出来的数字将是ibdata1的大小,只有当前表列表的数据字典条目,但其中没有数据。

你最后的评论,你说

因此,公开交易似乎不是正确的理由。我们每天创建大约200-300个表(通过我们的ETL工具),并在一些处理之后定期删除它们(每2-3周删除一些2k-5k表),这个属性可以归因于大文件吗?

您可能出于同样的原因是正确的:就像回滚段和撤销空间没有为操作系统回收未使用的磁盘空间一样,删除表和创建新的表同样没有为操作系统回收未使用的磁盘空间的准备。

要证明这一点,您必须使用该新服务器处理所有表,但不包含任何数据。然后,每周执行相同的删除和创建表的操作。如果ibdata1只是为了实现这个目的而增长,那么无可否认地证明,单是删除和创建表就可以在启用innodb_file_per_table的情况下增长ibdata1。

如果你想清理ibdata1,请看我的帖子

试试看!

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/95759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档