0

我正在编写一个多线程 Ruby 应用程序,该应用程序通过dm-sweatshop生成数据并将其加载到旧版 MySQL 数据库中以用于负载测试。一切工作正常,有一个例外,我正在加载几百万条记录,但我似乎无法增加数据库连接池的大小来更快地完成工作。它似乎卡在 10 个连接上。我已经尝试增加应用程序本身的线程池大小,但是看着 MySQL,我似乎无法建立超过 10 个连接。

我最初只是使用 URL 进行 DataMapper 设置:

DataMapper.setup(:default, 'mysql://user:password@db-server/testing')

但我已移至此尝试设置数据库池大小:

DataMapper.setup(:default, {
  :adapter  => 'mysql',
  :pool     => 20,
  :host     => 'db-server',
  :database => 'testing',
  :username => 'user',
  :password => 'password'
})

如何增加池大小?我觉得我已经倾注了在 DataMapper 上可以找到的所有 RDoc 和文档,但我找不到如何去做。在这一点上,我会切换到 ActiveRecord 来完成这项工作,但它不支持复合主键,我需要这个旧数据库。

作为参考,我将“线程/池”gem 用于多线程,并且该应用程序在 Ruby 1.9.3 中运行。这是我在多个线程中使用 DataMapper 的方式:

pool = Thread::Pool.new(@config[:thread_pool_size])
...
10000.times { pool.process {Customer.gen} }
...
pool.shutdown
sleep 5
puts "DONE!"
4

1 回答 1

1

考虑到这个问题很老而且 DataMapper 不再维护它有点过时了,但为了完整起见:DataMapper 使用硬编码的池大小为8并且忽略了您的配置。

另请参阅:Datamapper 和连接池逻辑

于 2018-04-23T11:20:54.670 回答