Metalでは ActiveRecordの作るDB connection を自分で解放しないといけない !!
先日の Rails勉強会で松田さん(Blog, GetHub) に Metalでは ActiveRecordの作るDB connection を自分で解放しないといけないらいし・・・ という話を聞いたので、試してみた。
たぶん、情報のソースは Don’t kill your app when using ActiveRecord in Rails Metal, release your database connections | redemption in a blog ではないかと思う。
PostgreSQL ではMySQLのように DB Connection がオーバーフローしてしまう事はありませんが、アクセス数を増やすと、処理速度が異常に遅いのです^^);
% ab -n 100 -c 10 'http://localhost:3000/・・・・・・・・・・' .... Requests per second: 0.82 [#/sec] (mean) Time per request: 12186.734 [ms] (mean) Time per request: 1218.673 [ms] (mean, across all concurrent requests) Transfer rate: 0.14 [Kbytes/sec] received
上のBlog記事にあるRailsのバグトラッキング情報のコメントによると、DB connection がデッドロックを起こすらしいです。そこで Blog にあるように Metal 処理の最後に ActiveRecord::Base.clear_active_connections! を入れて試してみると。
% ab -n 100 -c 10 'http://localhost:3000/・・・・・・・・・・' .... Requests per second: 62.94 [#/sec] (mean) Time per request: 158.892 [ms] (mean) Time per request: 15.889 [ms] (mean, across all concurrent requests) Transfer rate: 10.63 [Kbytes/sec] received
と通常の速度になりました。