我正在编写一个多线程 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!"