« 07.15 Pylons で使う paster command を作ってみる(2) | ココ | 07.19 1食単価700円 »

2009年7月16日

インデックスだけでは済まなかった  このエントリーを含むはてなブックマーク 

会社の案件ではRoRを扱ってるので、前日のバッチ処理なんかは調査のついでという感じだったんですが、

Ruby on Railsでcronでバッチ処理する(ref. Web7s)

みたく、script/runner cron.rb -e production とかすると簡単にModelが利用可能な状態でコマンドラインから処理できるようで。

RailsアプリでActiveRecordを使ったバッチ処理 その2(ref. ひげろぐ)

では、なんかscript/runner ではワンライナー的なものしか使えなくてファイルを実行するにはリダイレクトとか 'eval(IO.readlines("hoge.rb").join)' で無理やりワンライナーにするという解が示されてた…。不安やったんでワンライナー形式にてバッチ処理実行。バッチ処理の内容も特殊といえば特殊(画像をクロップするほうがメインやったり)なもんで、DB周りの負荷はあんまり注意してなかったんですが。ファイルの転送にえらい時間がかかる(10MB×824個=ざっと8.2GB?)。画像ファイルの容量でかすぎ。

データを入れた後、Webで画面を表示してみたところ、処理にえらく時間がかかるようになってしまった。DBに38秒ってどんなけアクセスしてるんだ。script/console でコマンドラインからクエリーを発行してみたら、そのクエリー自体は10秒程度で終わってるにもかかわらず、さらに細々としたクエリーを合わせると結構時間を取られているようで。外部結合がまず疑わしいので、インデックス張ったりしてみたりしたものの、やはり動作が鈍い。824件のレコードを、画面につらつらと表示させているのがどうも遅いために時間がかかっている…みたいで。

試しに、:select で拾ってくるカラムを絞ってみたら明らかに体感速度がマシになった。どうやら、レコードをオブジェクトに変換してるところがネック?

By ただ at 22:05 カテゴリー ; プログラミングとか

« 07.15 Pylons で使う paster command を作ってみる(2) | 07月の記事 | 07.19 1食単価700円 »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1447