MYSQL在大小中插入GB的巨大SQL文件

时间:2013-09-23 13:08:55

标签: mysql sql linux wikipedia database-performance

我正在尝试创建一个维基百科数据库副本(大约50GB),但是最大的SQL文件存在问题。

我使用linux split实用程序将大小为GB的文件拆分为300 MB的块。 e.g。

split -d -l 50 ../enwiki-20070908-page page.input.

平均300MB的文件在我的服务器上需要3个小时。 我是ubuntu 12.04服务器操作系统和Mysql 5.5服务器。

我正在尝试跟随:

mysql -u username -ppassword database < category.sql

注意:这些文件包含插入语句,而不是CSV文件。

维基百科提供数据库转储供下载,因此每个人都可以创建维基百科的副本。 您可以在此处找到示例文件:Wikipedia Dumps

我认为由于我的MySQL服务器的设置,导入很慢,但我不知道应该改变什么。我在具有相当处理器和2GB RAM的机器上使用标准的Ubuntu MySQL配置。有人可以帮助我为我的系统配置合适的配置吗?

我试图将innodb_buffer_pool_size设置为1GB但没有任何虚荣。

2 个答案:

答案 0 :(得分:3)

由于内存少于50GB(因此无法在内存中缓冲整个数据库),因此瓶颈就是磁盘子系统的写入速度。

加速进口的诀窍:

  • MyISAM不是事务性的,单线程插入的速度要快得多。尝试加载到MyISAM,然后ALTER将表加载到INNODB
    • 使用ALTER TABLE .. DISABLE KEYS逐行避免索引更新(仅限MyISAM)
    • bulk_insert_buffer_size设置为高于插入大小(仅限MyISAM)
    • 设置unique_checks = 0,以便不检查唯一约束。

有关详情,请参阅Bulk Data Loading for InnoDB Tables in MySQL Manual

注意:如果原始表具有外键约束,则使用MyISAM作为中间格式是个坏主意。

答案 1 :(得分:1)

如果您的数据库不是面向事务的,那么使用MyISAM通常比InnoDB快得多。您是否研究过使用任何表格分区/分片技术?

将巨大的MyISAM转换为InnoDB将再次遇到性能问题,因此我不确定是否会这样做。但禁用和重新启用密钥可能会有所帮助......

相关问题