首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >innodb全文ibdata1大小

innodb全文ibdata1大小
EN

Database Administration用户
提问于 2014-09-23 15:57:15
回答 1查看 291关注 0票数 1

我正在运行mariadb 10,并且有一个大的无害表和一个完整的文本索引。我有innodb_file_per_table=ON

不过,我注意到,ibdata1文件的增长速度与我的表文件相同。

我尝试使用mysqldump,删除文件和重新加载,以及分离撤消表空间。这两者都没有起到任何作用,所以我假设这不是某种类型的事务开销。

ibdata1文件是存储实际的全文索引,还是对文件中的增长有其他解释?

EN

回答 1

Database Administration用户

发布于 2014-09-23 17:27:28

首先,使用innodb_file_per_table=ON,所有数据和索引页都存储在表的.ibd文件中。

系统表空间(ibdata1)的增长可能是一个令人头疼的问题。

我在前几篇文章中提到过这一点。

在您的例子中,存在事务开销。因为mysqldump,您有大量的事务。为什么?

名为-被选择的默认选项启用了许多选项,包括-扩展-插入。扩展插入将导致mysqldump成批地将多个行转储到INSERT INTO。每一批行都是一个事务。因此,您应该期望ibdata1会膨胀,特别是如果表中有文本或BLOB数据(我怀疑是因为您有全文索引)。

解决这一问题的唯一方法是使用--skip-extended-insert再次运行mysqldump。这将做三件非常令人讨厌的事情:

  1. 为每一行运行INSERT
  2. 生成一个更大的mysqldump文件。
  3. 重新装船需要更长的时间

这使得每个单独插入事务的速度快数百或数千倍,因为您正在插入一行,而不是数百或数千行。不幸的是,由于插入的数量,您需要再执行数百或数千次。这只是防止ibdata1膨胀的一种方法。

您可以尝试的另一件事是从表中删除全文索引,用skip-extended-insert转储它,重新加载它,然后将全文索引添加回来。这可能会有所帮助,因为添加全文索引不是事务。

试试看!!

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

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

复制
相关文章

相似问题

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