我有一个大数据库,拥有大约240 My的数据和索引(从phpMyAdmin读取--我的表在innodb中)。但是,服务器上的数据库文件夹的大小接近400 6Gb,而我的ibdata1文件的大小约为6GB,导致我的SSD空间不足。
我对此进行了调查,似乎有许多像FTS_0000000000000f86_00000000000019db_INDEX_1.ibd这样的文件具有几十千兆字节大小。它们看起来(根据它们的文件名)我对它们关联的表的全文索引,每个表有6个(FTS_*_INDEX_1.ibd到FTS_*_INDEX_6.ibd)。
我做了我的搜索,并发现这些帖子:
和
我在对这两个问题/答案的评论中提出了我的问题,但尚未得到答复。所以我决定直接问我的问题。
如果我使用启用了InnoDB的“innodb_file_per_table清理”(如上面的第一个环节中的建议),那么我的数据库文件夹中还会有很多像FTS_\*_INDEX_1.ibd这样的大型文件吗?这种方法只有助于减少ibdata1文件大小吗?在这些大表(如建议)上的常规OPTIMIZE TABLE是否能帮助我解决我的问题?
谢谢!
更新:
以下是大于1Gb的按文件大小进行反向排序的文件列表(文件名被更改):
-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发布于 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查找现有全文索引的名称和列,以便正确地重新创建它们。
例如:
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语句中删除并添加索引:
alter table your_table
drop index fti_idx,
add fulltext index fti_idx (col1,col2);发布于 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%'进行的表扫描。
https://stackoverflow.com/questions/41941925
复制相似问题