如何在MySql中的InnoDB表中提高插入速度

时间:2015-03-22 05:13:50

标签: mysql ruby database

我的任务是在MySql数据库中填充一些InnoDB表和一些性能评估的随机数据(目标是每个表500GB)。

我已在这两个表上放置了分区(每个31个,均匀分布)。在每个表中生成大约40 GB的数据后,现在我的插入卡被固定在每秒约150个插入和表格中。我相信我在服务器上的配置(120GB RAM,40核CPU,每个3GHz,SDA磁盘),我应该能够插入更多。

这些表上有很多索引可以减慢速度。

我在以下方面使用Ruby脚本:

  • 在每个查询中插入具有多个值的查询
  • 在数据中写入数据而不是执行load-data-infile查询
  • 两者兼而有之,每个插入查询100-300个值,load-data-infile文件中有3000行。

使用上述脚本的多个实例也不会增加表中每秒的插入次数。

以下是DB中的关键配置:

bulk_insert_buffer_size : 1G  
innodb_buffer_pool_size : 75G    
innodb_flush_log_at_trx_commit : 2 
innodb_doublewrite : OFF  
tx_isolation : READ-UNCOMMITTED    
foreign_key_checks : OFF    
unique_checks : OFF

请让我知道,我可以做些什么来增加插入,因为我相信MySql可以处理的方式多于此。我已经浏览了其他相关帖子,并根据这些帖子做了以上。

架构:http://pastebin.com/EaSyFX1j

1 个答案:

答案 0 :(得分:0)

这取决于限制因素是什么。你说桌子上有很多索引。众所周知,索引会降低插入和更新操作的速度。也许删除索引,插入数据并在之后重新创建索引会更快(不要删除主索引和唯一索引,而只删除常规索引。