ibdata 文件多大才算太大?

nac*_*ito 9 mysql innodb

我的ibdata文件很大,至少在我看来是很大的。这是过度还是不那么糟糕?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
Run Code Online (Sandbox Code Playgroud)

Jef*_*and 13

当这可能是一个问题时

如果您show table status在表上运行并且该Data_free字段占ibdata1文件大小的绝大部分,那么您可能会浪费大量空间。大量的插入/删除会使这成为一个问题。如果是这种情况并且瞬时插入和删除构成了您的大部分数据,那么您就有了一个很好的案例,即每个表的文件。

不过,这不是自动的“是”。世界上有很多关于 InnoDB 文件内部碎片的讨论,但是将它们作为 file-per-table 放入文件系统只会将您的碎片移动到文件系统级别而不是数据库级别。

为什么这通常不是问题

将您的 InnoDB 文件视为文件系统而不是文件。如果您有很多文件,则需要一个大文件系统。

在大多数情况下,文件系统在扩展以处理 TB 级数据和无数文件方面做得非常好。有时它们会遇到索引不良的问题(例如,在性能影响之前限制目录中的文件数量),但在大多数情况下,现代文件系统可以很好地达到 TB 级。

InnoDB 的功能相同。您的数据文件的大小可能很大……并且与大型文件系统一样,这可能会出现备份数据的问题。但是,就像将文件系统拆分为多个分区对解决此问题没有帮助一样,尝试操作 innodb 也无济于事。虽然您可以使用innodb_file_per_table,但我很少推荐它。

就像您的文件系统一样,更好的答案是了解内部限制并在其中工作。了解索引并适当地应用它们。不要试图拆分 InnoDB,它不是为了那个。

由于我正在努力建设性地传达这个概念,这里有一个快速阅读,比我能更好地表达这个词:太字节不是大数据,太字节是.

我记得一个非常古老的 MySQL 营销幻灯片,其中客户正在运行一个数 TB 的数据仓库。多年前。InnoDB 或 MyISAM,两者都可以。这是标准的现成 MySQL 内容。

不要担心 15GB 的数据库。


pQd*_*pQd 6

ibdata 文件不会缩小 - 如果您最近删除了一些表或删除了很多行 - 您的配置中的 innodb 不会将可用空间释放回文件系统。我建议你:

  • 备份所有数据,例如使用 mysqldump
  • 添加到 my.cnf innodb_file_per_table 指令
  • 重启mysql
  • 使用 innodb 引擎删除所有数据库
  • 停止mysql
  • 删除 ibdata 文件
  • rm ib_logfile[01]
  • 启动mysql,检查系统日志是否一切正常
  • 重新加载你的转储

通过这种方式,无论何时删除 innodb 表/数据库,您都可以回收空间 - 将立即删除关联的 idb 文件。