首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法减少“FTS_*_*_INDEX_1.ibd”文件在MySQL数据库文件夹中的大小?

有没有办法减少“FTS_*_*_INDEX_1.ibd”文件在MySQL数据库文件夹中的大小?
EN

Stack Overflow用户
提问于 2017-01-30 17:31:29
回答 2查看 5.6K关注 0票数 2

我有一个大数据库,拥有大约240 My的数据和索引(从phpMyAdmin读取--我的表在innodb中)。但是,服务器上的数据库文件夹的大小接近400 6Gb,而我的ibdata1文件的大小约为6GB,导致我的SSD空间不足。

我对此进行了调查,似乎有许多像FTS_0000000000000f86_00000000000019db_INDEX_1.ibd这样的文件具有几十千兆字节大小。它们看起来(根据它们的文件名)我对它们关联的表的全文索引,每个表有6个(FTS_*_INDEX_1.ibdFTS_*_INDEX_6.ibd)。

我做了我的搜索,并发现这些帖子:

如何清除mysql InnoDB存储引擎?

数据库空间与ibdata1大小不匹配

我在对这两个问题/答案的评论中提出了我的问题,但尚未得到答复。所以我决定直接问我的问题。

如果我使用启用了InnoDB的“innodb_file_per_table清理”(如上面的第一个环节中的建议),那么我的数据库文件夹中还会有很多像FTS_\*_INDEX_1.ibd这样的大型文件吗?这种方法只有助于减少ibdata1文件大小吗?在这些大表(如建议)上的常规OPTIMIZE TABLE是否能帮助我解决我的问题?

谢谢!

更新:

以下是大于1Gb的按文件大小进行反向排序的文件列表(文件名被更改):

代码语言:javascript
运行
复制
-rw-rw----. 1 mysql mysql  1300234240 Jan 30 18:28 FTS_0000000000000fc2_DELETED.ibd
-rw-rw----. 1 mysql mysql  1375731712 Jan  7 21:41 FTS_0000000000000f86_00000000000019db_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  1585446912 Jan 30 23:17 FTS_0000000000001000_0000000000001a68_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  1593835520 Jan  7 21:41 FTS_0000000000000f86_00000000000019bf_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  1673527296 Jan 29 23:41 FTS_0000000000001000_DELETED.ibd
-rw-rw----. 1 mysql mysql  1824522240 Jan  7 21:41 FTS_0000000000000f86_00000000000019cd_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  2172649472 Jan 30 01:16 FTS_0000000000001073_0000000000001b3c_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  2281701376 Jan  7 21:41 FTS_0000000000000f86_00000000000019b1_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  2357198848 Jan 31 02:53 FTS_0000000000000fc2_0000000000001a0f_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  2495610880 Jan 28 13:59 FTS_0000000000000fc2_0000000000001a2b_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  2906652672 Jan 30 23:18 FTS_0000000000001000_0000000000001a76_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  3984588800 Jan 30 23:18 FTS_0000000000001000_0000000000001a6f_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  4135583744 Jan 30 08:03 FTS_0000000000000fc2_00000000000019fa_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  5716836352 Jan 28 13:59 FTS_0000000000000fc2_0000000000001a01_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  6400507904 Jan 31 05:39 my_k.ibd
-rw-rw----. 1 mysql mysql  7449083904 Jan  7 21:41 FTS_0000000000000f86_00000000000019d4_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  8115978240 Jan  7 21:41 FTS_0000000000000f86_00000000000019c6_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  8308916224 Jan 30 08:03 FTS_0000000000000fc2_0000000000001a16_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  8434745344 Jan  7 21:41 FTS_0000000000000f86_00000000000019b8_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  9244246016 Jan  7 21:41 FTS_0000000000000f86_00000000000019aa_INDEX_1.ibd
-rw-rw----. 1 mysql mysql  9714008064 Jan 30 01:16 my_a.ibd
-rw-rw----. 1 mysql mysql 12738101248 Jan 31 05:43 my_s.ibd
-rw-rw----. 1 mysql mysql 14038335488 Jan 31 02:53 FTS_0000000000000fc2_0000000000001a24_INDEX_1.ibd
-rw-rw----. 1 mysql mysql 19906166784 Jan 30 08:03 FTS_0000000000000fc2_0000000000001a1d_INDEX_1.ibd
-rw-rw----. 1 mysql mysql 21185429504 Jan 31 05:43 my_p_s.ibd
-rw-rw----. 1 mysql mysql 29242687488 Jan 31 02:54 FTS_0000000000000fc2_0000000000001a32_INDEX_1.ibd
-rw-rw----. 1 mysql mysql 30131879936 Jan  5 16:35 my_p.ibd
-rw-rw----. 1 mysql mysql 47085256704 Jan 31 05:43 my_a_c.ibd
-rw-rw----. 1 mysql mysql 76499910656 Jan 31 05:43 my_p_c.ibd
-rw-rw----. 1 mysql mysql 76743180288 Jan 30 00:09 my_r.ibd
EN

回答 2

Stack Overflow用户

发布于 2017-01-31 02:55:13

正如您所怀疑的,FTS_*.ibd文件是InnoDB FULLTEXT索引文件。收缩这些文件的最佳方法通常是删除和重新创建FULLTEXT索引。执行OPTIMIZE TABLE可能有帮助,也可能没有帮助,这取决于您是否启用了innodb_optimize_fulltext_only,但是回收空间的最安全的赌注是drop/add。

在仅插入的工作负载上,drop/add通常会使文件更小,如果这些表得到大量更新和/或删除,那么drop/add的大小节省应该会更大。大型FTS_*_DELETED.ibd文件的存在意味着您已经从这些表中删除了一些数据,因此对索引进行删除/添加将为您节省一些磁盘空间。

可以使用SHOW CREATE TABLE查找现有全文索引的名称和列,以便正确地重新创建它们。

例如:

代码语言:javascript
运行
复制
mysql > show create table your_table\G
*************************** 1. row ***************************
       Table: your_table
Create Table: CREATE TABLE `your_table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `col1` varchar(255) DEFAULT NULL,
  `col2` varchar(255) DEFAULT NULL,
  ...
  PRIMARY KEY (`id`),
  FULLTEXT KEY `fti_idx` (`col1`,`col2`)
) ENGINE=InnoDB;
1 row in set (0.00 sec)

然后可以在一个ALTER TABLE语句中删除并添加索引:

代码语言:javascript
运行
复制
alter table your_table
  drop index fti_idx,
  add fulltext index fti_idx (col1,col2);
票数 4
EN

Stack Overflow用户

发布于 2017-01-31 02:30:16

*.ibd文件都是InnoDB表空间文件。它们包含以文件/表方式存储的InnoDB表的数据和/或索引。通常,文件名与它们存储的表相匹配,这是毫无疑问的。

FTS_*.ibd文件是InnoDB实现全文索引的索引。这是MySQL 5.6中引入的一个新特性,对于存储特性没有多少文档化的知识。显然,由于某种原因,它们相当笨重。我不知道OPTIMIZE TABLE是否对全文索引有任何影响。

当然,处理这些大文件的一种方法是删除为InnoDB表定义的所有全文索引。

其他一些全文索引产品(如ElasticSearch或Apache或Search )可以更简洁地存储它们的索引。我在这里对全文索引解决方案做了比较:

全文搜索Throwdown

InnoDB的全文索引是我测试过的最慢的解决方案,除了用LIKE '%pattern%'进行的表扫描。

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

https://stackoverflow.com/questions/41941925

复制
相关文章

相似问题

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