2012-04-02 14 views
1

num rows = Integer.MAX_VALUEを指定すると、SOLRがメモリ不足エラーをスローするようです。SOLR大きな行数のメモリ不足クエリ

これは大きなデータセットには意味がありますが、私のケースでは、実行しているクエリには1つの結果しかありません。私はそれを仮定して、 "num行"パラメータをどれくらい大きくしても、サーバーは要求を処理できるはずです(戻りデータセットには1つの結果しかないため)。

SOLRは入力として「行数」パラメータをどのように使用しますか? SOLRはクエリを実行する前にメモリを事前に割り当てようとしていますか?

+0

この質問は、特定の問題ではなく、SOLRに関する一般的な質問です。この問題に対する解決策は明らかですが、結果集合にそのような少数の要素がある場合、SOLRが例外を介して可能性があるという事実にもっと興味があります。 – jayunit100

+0

行= 1の場合は問題ありませんか? SOLRはアウトメモリの例外またはそのクライアントを投げますか(たとえばSOLRjとか)?あなたのSOLRのバージョンとスタックトレースも同様に役立ちます –

答えて

2

Solr 3.5では、オーバーフローの場合にmaxDoc()によって要求されたドキュメントの数がSolrIndexSearcherで置き換えられます。したがって、これは発生しません。

実際にSolrがInteger.MAX_VALUEエントリを割り当てようとすると、この割り当てはおそらくOOMのスタックトレースにあります。あなたは確認する必要があります:

使用されているSolrIndexSearcherのどのような方法
  • 、あなたのSolrバージョンのSolrIndexSearcherソースコードはドキュメントの数をテストするかどうかを
  • は、Solrの3.5と同じように要求しました。
+0

フィードバックありがとう...私はこれを見ていきます。 SOLRが結果セットのサイズを事前に割り当てている可能性を示唆していますか?奇妙に思えるかもしれませんが、結果のサイズが小さい場合の「通常の」シナリオでは、ある程度の価値があるかもしれません。ちなみに、私はJavaのシリアライズされたSOLRDocumentクエリAPIを使用しています.JSONのものではありません。 – jayunit100

+0

これは起こるべきではないことを示唆していますが、あなたの仮説であったので、Solrのバージョンがこのバグを持っていないことを確認してください。このバグが存在する場合は、Solr 3.5で修正されている場合はアップグレードするか、それ以外の場合はSolr開発者に報告してください。 SolrのバージョンとOOMのスタックトレースを提供していただければ、お手伝いします。 – jpountz

1

rows = Integer.MAX_VALUEを指定しないでください。ページ内のデータを取得し、適切なサイズの行を設定します。

Solrが何百万行も戻った場合、クライアントのメモリ不足、タイムアウトの読み取り、その後の再試行など、あらゆる種類の悪いことが起こる可能性があります。

これはバグを提出したいかもしれませんが、これは基本的に入力が悪いと悪い動作です。

+0

あなたの答えは、これが確かにSOLRのバグであることを暗示しているようです。フィードバックをお寄せいただきありがとうございます。 – jayunit100

+0

私はこれを不正な入力値として拒否するか、多分400のHTTP応答で拒否するか、それを無視して修正することを期待します。 Solr 3.5は後者を実行するように見えます。 OutOfMemoryを投げることは、不正な入力に対して正しい応答ではありません。それでも、Solrがそれを受け入れるとしても、これを行うことはあなたのコードの時限爆弾です。 –

+0

私はsolrダンプを頻繁にしなければならず、私は10M以上の行を設定します。クライアントのメモリが不足している場合、それはクライアントの障害です.SOLRとは何の関係もありません。 –

関連する問題