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

标签 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

最佳答案

这取决于限制因素是什么。你说表上有很多索引。众所周知,索引会减慢插入和更新操作。也许删除索引、插入数据并随后重新创建索引会更快(不要删除主索引和唯一索引,而只删除常规索引。

关于mysql - 如何提高MySql中InnoDB表的插入速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29191244/

相关文章:

ruby - 如何在 Rack::Builder::map 中使用 Lotus 路由器

ruby - 没有 block 的更简洁的 max/min 版本

database - SSIS Excel 数据提取

mysql - 使用 VB.Net 连接到在线 MySQL 数据库

php - 显示 php mysql 大段落的前 3 行

mysql - RAND()在MySQL中的分布

MySQL gem 问题 - Mysql :Class 的未定义方法 `init'

database - 将 GZIP HDFS 数据复制到 vertica

php - 输入正确的 Google Recaptcha 挑战和激活码后无法重定向到所需页面

sql - 使用 datetime 和 php 从 1、7 和 30 天前选择 mysql db 中的记录