teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/05/24 04:05

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -6,4 +6,16 @@
6
6
  メモリーは有限であるのに、サイズを考慮せずに取得する方が問題です。
7
7
  オンラインである場合は、件数制限を設けるのが普通ですし、バッチなどの場合は分割コミットなどで対応します。
8
8
 
9
- 取り敢えずは、select文 に **limit**を付けて、状況を確認してみて下さい。
9
+ 取り敢えずは、select文 に **limit**を付けて、状況を確認してみて下さい。
10
+
11
+ 追記
12
+ --
13
+ > fetchsizeを指定している場合でも元のDBの件数が増えた場合はメモリ使用量は増えるものなのでしょうか?
14
+
15
+ 該当しているかどうかは分かりませんが、以下参考
16
+ [JDBC setFetchSize() ではまった話](https://www.techscore.com/blog/2019/02/27/jdbc-setfetchsize-%E3%81%A7%E3%81%AF%E3%81%BE%E3%81%A3%E3%81%9F%E8%A9%B1/)
17
+
18
+ > PostgreSQLの場合、setFetchSize() を使用することで暗黙的にカーソルが作成され、ResultSet#next()時に適宜、作成したカーソルを使用してデータがロードされます。
19
+ >
20
+ > ただし、トランザクション内でのみ上記挙動となります。トランザクション外の場合、とくにエラーなどなくクエリが実行されますが、全件ロードされてしまいます。
21
+ > 件数、搭載メモリ量によってOutOfMemoryErrorとなる可能性があります。