現在railsで以下のようなバッチプログラムを使っていますが、メモリ使用量が多いです。
- データベースの数は1000ほど
- データベース文ループし、各データベースのデータを全て取得してcsvに書き出す
悩んでいる点としては、ループが進むほどメモリを圧迫していっている点です。
一つ前のループでのデータは不要なのでメモリに持っておく必要はないのですが、どうも自動でメモリから解放してくれないようです。
ここを参考に色々試してみたのですが、解放されてないっぽいです。
他の記事も調べましたが、解放を考えるより.all
等を使わず.select
を使い使用するメモリを減らすような記事が多かったです。
現状メモリの容量内に収まっているので大丈夫ですが、今後を考えると改善しておきたいです。
皆様の知恵をお貸し下さい。
参考までに以下のようなコードです。(サンプルです)
ruby
1# ここで全てのDBの名前を取得しています 2db_names = db_names 3 4db_names.each do |db_name| 5 # ここでDBを切り替えています 6 DatabaseChange(db_name) do 7 Article.export_csv 8 end 9end
ruby
1def export_csv 2 # 実際にはもっと複雑な取得処理ですが割愛しています 3 articles = Article.all 4 # 以後export処理 5end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/28 22:38