0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Railsでメモリ使用量を削減できるメソッド

Last updated at Posted at 2024-04-18

先日、rake taskを実行した際に、扱うレコード数が多すぎて、サーバーに負荷をかけてしまいました。その解決策として、役立つメソッドを知ったので、まとめています。

メモリ使用量の削減

- find_each

使用例
find_each.rb
Model.find_each do |model|
    model.update!(hoge: hoge)
end

1000件ずつレコードを取り出し、1レコードずつブロック内の処理を実行していきます。
Modelの内容を一度にすべて取り出すのではなく、1000件ずつ取り出すので、メモリ使用量を抑えることができます。

batch_sizeオプションを指定する場合(3000件ずつ)
find_each.rb
Model.find_each(batch_size: 3000) do |model|
    model.update!(fuga: fuga)
end

取り出す件数を1000件ずつではなく、任意の件数にしたい場合は、batch_sizeオプションを使用することで、変更することができます。

- find_in_batches

使用例
find_in_batches.rb
Model.find_in_batches do |models|
    hoge(models)
end

1000件ずつデータを取り出し、1000件のデータの配列として、ブロック内の処理を実行します。find_batchesでも同様に、batch_sizeオプションを使うことで、1回に取り出す件数を変更することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?