0

dm-sweatshopを介してデータを生成し、負荷テストで使用するためにレガシーMySQLデータベースにロードするマルチスレッドRubyアプリケーションを作成しています。1つの例外を除いて、すべてが正常に機能しています。数百万のレコードをロードしていますが、DB接続プールのサイズを増やして処理を高速化することはできないようです。10接続でスタックしているようです。アプリケーション自体のスレッドプールサイズを増やしてみましたが、MySQLを見ると、10を超える接続が確立されていないようです。

私は元々、DataMapperのセットアップにURLを使用していました。

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

しかし、私はこれに移動して、DBプールサイズを設定しようとしました。

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

プールのサイズを増やすにはどうすればよいですか?DataMapperで見つけることができるすべてのRDocとドキュメントに注いだように感じますが、その方法がわかりません。この時点でこれを機能させるためにActiveRecordに切り替えたはずですが、このレガシーDBに必要な複合主キーをサポートしていません。

参考までに、マルチスレッドに「thread / pool」gemを使用しており、アプリはRuby1.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