我正在尝试恢复 GHTorrent 的数据库转储(包含 GitHub 元数据的 CSV 文件)。该commits表拥有超过 8.91 亿行,并且project_commits拥有超过 54 亿行。由于这些表相当大,我必须使用LOAD DATA INFILE外键检查来加载它们。我正在使用MyISAM引擎。将记录导入表后,我尝试为这些表创建索引。
我正在为表运行以下 mysql 命令commits,但它在超过 12 小时内才完成。
CREATE UNIQUE INDEX `sha` ON `ghtorrent_restore`.`commits` (`sha` ASC) COMMENT '';
Run Code Online (Sandbox Code Playgroud)
提交表如下所示:
my.cnf我已阅读有关缓慢索引的其他 stackexchange 问题,并在目录中的文件中设置以下内容/etc/mysql。
[mysqld]
bulk_insert_buffer_size=1G
myisam_sort_buffer_size=8G
key_buffer_size=6G
sort_buffer_size=10M
Run Code Online (Sandbox Code Playgroud)
由于上一个命令没有及时完成,我不得不从控制台使用 ctrl+z 来停止它。我检查了 MySQL Workbench 上的表,它没有显示为损坏,但它显示索引长度约为 36GB。
导入该表大约需要 25 分钟,因此我预计索引不会超过一个小时,但我现在运行“创建唯一索引”命令大约 2 小时,没有任何进展迹象。
当我运行该命令时,mysqld 占用大量 cpu 并且不断占用内存。达到 6GB 左右后,它变得不那么活跃,似乎几乎什么也不做。
以下是该命令(在下图中选择的一个)在 mysql 工作台中的外观。
我正在一台具有 16GB RAM 的 Linux Mint 17.03 机器上运行 Mysql …