我的ibdata文件很大,至少在我看来它非常大。这是不是太糟糕了?
-rw-rw---- 1 mysql mysql 15G Apr 18 10:11 ibdata1
我的ibdata文件很大,至少在我看来它非常大。这是不是太糟糕了?
-rw-rw---- 1 mysql mysql 15G Apr 18 10:11 ibdata1
Answers:
如果您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数据库。
InnoDB free: 7364608 kB
ibdata文件不会缩小-如果您最近删除了一些表或删除了很多行-配置中的innodb不会将可用空间释放回文件系统。我建议你:
这样,只要您删除innodb表/数据库,就可以回收空间-关联的idb文件将立即被删除。