【问题标题】:how to increase inserts speed in InnoDB Table in MySql如何在 MySql 的 InnoDB 表中提高插入速度
【发布时间】:2015-03-22 16:48:38
【问题描述】:

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

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

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

我通过以下方式使用 Ruby 脚本:

  • 在每个查询中插入具有多个值的查询
  • 将数据写入文件而不是进行加载数据输入文件查询
  • 这两种情况的混合,每个插入查询有 100-300 个值,load-data-infile 文件中有 3000 行。

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

以下是数据库中的关键配置:

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 ruby database


【解决方案1】:

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

【讨论】:

  • 我想过,但是因为我的目标是填充 500GB 的数据,在生成这么多之后,我将没有空间来更改它,因为它需要相同数量的空间来更改它(用于 tmp 表),我不会有。
  • 不需要复制表格。您只需要索引空间。
  • 另外,分区不应该有助于减少索引带来的开销吗,我有 31 个分区,每个分区中的数据几乎相等。
猜你喜欢
  • 2012-08-04
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多