0

結果セットが大きすぎます。メモリを消費する巨大なデータセットを返す場合はOutOfMemory、サーバーにエラーが表示されます。ヒープサイズを増やす以外に、この問題をどのように処理できますか?

4

5 に答える 5

0

そもそも、結果セットが正しい/最適化されているかどうかをクエリで確認してください。
そして、ほとんどのデータベースでは、とにかく返される行の数を次のようなもので制限できます。

SELECT top(1000) * FROM mytable;
于 2013-03-14T09:54:49.667 に答える
0

結果セット全体をメモリにロードできない場合は、ロードしないでください。状況に応じて、次の 3 つの選択肢が考えられます。

  • 一度に結果セットの一部のみを読み取ります。たとえば、「ページ」で取得します。
  • 結果セットを読みながら縮小します。たとえば、必要なフィールドを抽出したり、集計したりします。
  • データベースでデータ削減を実行できるように、クエリを再構築します。

結果セットに含まれる内容とそれを使用して何を行っているかについて詳細を提供していただければ、具体的な提案を提供できる可能性があります。

于 2013-03-14T10:10:08.757 に答える
0

単一のクエリで必要なすべてを返すことができるようにクエリを構成できる場合、結果セット ストリーミングを使用すると、データベースから一度に 1 行ずつ結果を返すことができます。クライアント ソフトウェアとデータベース間のデータ トラフィックが増加する代わりに、メモリの使用量が大幅に削減されます。私の会社では、数百万行が返される結果セットを操作するときに、これが非常に効果的であることがわかりました。この機能はデータベースに依存します。MySQL については、次の URL で説明されています。

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-implementation-notes.html

于 2013-03-14T11:15:45.297 に答える
0

一度にそれほど多くのデータを入れないようにしてください。ページネーターなどを使用してください。

于 2013-03-14T09:53:22.183 に答える
0

ページネーター パターンを使用します。すべてを一度に取得するのではなく、定期的にデータの一部のみを取得します。たとえば、100 件の結果を取得する代わりに、20 件の結果を 5 回取得できます: 0 ~ 19、次に 20 ~ 39、次に 40 ~ 59 など...

于 2013-03-14T09:56:06.250 に答える