我正在运行mariadb 10,并且有一个大的无害表和一个完整的文本索引。我有innodb_file_per_table=ON
不过,我注意到,ibdata1文件的增长速度与我的表文件相同。
我尝试使用mysqldump,删除文件和重新加载,以及分离撤消表空间。这两者都没有起到任何作用,所以我假设这不是某种类型的事务开销。
ibdata1文件是存储实际的全文索引,还是对文件中的增长有其他解释?
发布于 2014-09-23 17:27:28
首先,使用innodb_file_per_table=ON,所有数据和索引页都存储在表的.ibd文件中。
系统表空间(ibdata1)的增长可能是一个令人头疼的问题。
我在前几篇文章中提到过这一点。
Apr 23, 2013:Innodb ibdata1 1文件如何能以5倍的速度增长?_文件_每_桌子准备好了?Mar 31, 2014:mysql目录在一次查询后增长到246g,该查询由于表已满而失败。Jun 16, 2014:表上的MySQL索引创建失败已满在您的例子中,存在事务开销。因为mysqldump,您有大量的事务。为什么?
名为-被选择的默认选项启用了许多选项,包括-扩展-插入。扩展插入将导致mysqldump成批地将多个行转储到INSERT INTO。每一批行都是一个事务。因此,您应该期望ibdata1会膨胀,特别是如果表中有文本或BLOB数据(我怀疑是因为您有全文索引)。
解决这一问题的唯一方法是使用--skip-extended-insert再次运行mysqldump。这将做三件非常令人讨厌的事情:
这使得每个单独插入事务的速度快数百或数千倍,因为您正在插入一行,而不是数百或数千行。不幸的是,由于插入的数量,您需要再执行数百或数千次。这只是防止ibdata1膨胀的一种方法。
您可以尝试的另一件事是从表中删除全文索引,用skip-extended-insert转储它,重新加载它,然后将全文索引添加回来。这可能会有所帮助,因为添加全文索引不是事务。
试试看!!
https://dba.stackexchange.com/questions/77397
复制相似问题