ibdata文件太大了吗?


9

我的ibdata文件很大,至少在我看来它非常大。这是不是太糟糕了?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1

4
您的ibdata文件非常小。
杰夫·费兰德

将文件拆分成较小的块(例如4G),在性能上会更好还是更坏?
nachito 2012年

Answers:


13

当这可能是个问题时

如果您show table status在表上运行并且该Data_free字段构成了ibdata1文件大小的绝大部分,则可能浪费了很多空间。大量的插入/删除操作会引起问题。如果是这种情况,并且瞬态插入和删除构成了大部分数据,则每个表的文件都有一个很好的理由。

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

为什么这通常不是问题

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

在大多数情况下,文件系统确实可以很好地扩展以处理TB级的数据和无数的文件。有时它们会遇到索引编制不佳的问题(例如,对性能造成影响之前对目录中文件数量的限制),但是在大多数情况下,现代文件系统可以扩展到TB级。

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

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

由于我一直在努力以建设性的方式传达这一概念,因此请快速阅读以下内容:我比这更好:TB不是大数据,PB是

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

不要耗费15GB数据库。


看来我的使用率不到50%。InnoDB free: 7364608 kB
nachito 2012年

@nachito听起来应该没问题。如果您认为需要为文件系统留出空间,请对其进行回收。如果您只是担心性能,请不要担心。另外,为了提高性能,最好将数据库文件保留在其自己的分区上,因此,如果您专注于性能,则无论如何都不会看到可用的回收。
杰夫·弗兰

6

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

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

这样,只要您删除innodb表/数据库,就可以回收空间-关联的idb文件将立即被删除。


我知道它永远不会缩小而不进行转储和重新加载表。但是,如果我删除了InnoDB数据库,它将在开始重新增长之前使用该“可用”空间吗?
nachito 2012年

1
@nachito是的,它将。
杰夫·费兰德


您的回答只是一个简单的建议,不会像我的回答那样使问题蒙上阴影。+1 !!!
RolandoMySQLDBA 2012年

1
好吧,答案是减少数据文件使用空间的解决方案,但这不是关于与之相关的优点的讨论,而这正是我阅读本文时所要解决的问题。15GB的ibdata文件重要吗?
杰夫·费兰德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.