What kind of statistics?    Are these stats that you could perhaps get from 
faceting or the stats component instead of gathering docs and accumulating 
stats yourself?



> On Jul 14, 2020, at 8:51 AM, Odysci <ody...@gmail.com> wrote:
> 
> Hi Erick,
> 
> I agree. The 300K docs in one search is an anomaly.
> But we do use 'fq' to return a large number of docs for the purposes of
> generating statistics for the whole index. We do use CursorMark extensively.
> Thanks!
> 
> Reinaldo
> 
> On Tue, Jul 14, 2020 at 8:55 AM Erick Erickson <erickerick...@gmail.com>
> wrote:
> 
>> I’d add that you’re abusing Solr horribly by returning 300K documents in a
>> single go.
>> 
>> Solr is built to return the top N docs where N is usually quite small, <
>> 100. If you allow
>> an unlimited number of docs to be returned, you’re simply kicking the can
>> down
>> the road, somebody will ask for 1,000,000 docs sometime and you’ll be back
>> where
>> you started.
>> 
>> I _strongly_ recommend you do one of two things for such large result sets:
>> 
>> 1> Use Streaming. Perhaps Streaming Expressions will do what you want
>>    without you having to process all those docs on the client if you’re
>>    doing some kind of analytics.
>> 
>> 2> if you really, truly need all 300K docs, try getting them in chunks
>>     using CursorMark.
>> 
>> Best,
>> Erick
>> 
>>> On Jul 13, 2020, at 10:03 PM, Odysci <ody...@gmail.com> wrote:
>>> 
>>> Shawn,
>>> 
>>> thanks for the extra info.
>>> The OOM errors were indeed because of heap space. In my case most of the
>> GC
>>> calls were not full GC. Only when heap was really near the top, a full GC
>>> was done.
>>> I'll try out your suggestion of increasing the G1 heap region size. I've
>>> been using 4m, and from what you said, a 2m allocation would be
>> considered
>>> humongous. My test cases have a few allocations that are definitely
>> bigger
>>> than 2m (estimating based on the number of docs returned), but most of
>> them
>>> are not.
>>> 
>>> When i was using maxRamMB, the size used was "compatible" with the the
>> size
>>> values, assuming the avg 2K bytes docs that our index has.
>>> As far as I could tell in my runs, removing maxRamMB did change the GC
>>> behavior for the better. That is, now, heap goes up and down as expected,
>>> and before (with maxRamMB) it seemed to increase continuously.
>>> Thanks
>>> 
>>> Reinaldo
>>> 
>>> On Sun, Jul 12, 2020 at 1:02 AM Shawn Heisey <apa...@elyograg.org>
>> wrote:
>>> 
>>>> On 6/25/2020 2:08 PM, Odysci wrote:
>>>>> I have a solrcloud setup with 12GB heap and I've been trying to
>> optimize
>>>> it
>>>>> to avoid OOM errors. My index has about 30million docs and about 80GB
>>>>> total, 2 shards, 2 replicas.
>>>> 
>>>> Have you seen the full OutOfMemoryError exception text?  OOME can be
>>>> caused by problems that are not actually memory-related.  Unless the
>>>> error specifically mentions "heap space" we might be chasing the wrong
>>>> thing here.
>>>> 
>>>>> When the queries return a smallish number of docs (say, below 1000),
>> the
>>>>> heap behavior seems "normal". Monitoring the gc log I see that young
>>>>> generation grows then when GC kicks in, it goes considerably down. And
>>>> the
>>>>> old generation grows just a bit.
>>>>> 
>>>>> However, at some point i have a query that returns over 300K docs (for
>> a
>>>>> total size of approximately 1GB). At this very point the OLD generation
>>>>> size grows (almost by 2GB), and it remains high for all remaining time.
>>>>> Even as new queries are executed, the OLD generation size does not go
>>>> down,
>>>>> despite multiple GC calls done afterwards.
>>>> 
>>>> Assuming the OOME exceptions were indeed caused by running out of heap,
>>>> then the following paragraphs will apply:
>>>> 
>>>> G1 has this concept called "humongous allocations".  In order to reach
>>>> this designation, a memory allocation must get to half of the G1 heap
>>>> region size.  You have set this to 4 megabytes, so any allocation of 2
>>>> megabytes or larger is humongous.  Humongous allocations bypass the new
>>>> generation entirely and go directly into the old generation.  The max
>>>> value that can be set for the G1 region size is 32MB.  If you increase
>>>> the region size and the behavior changes, then humongous allocations
>>>> could be something to investigate.
>>>> 
>>>> In the versions of Java that I have used, humongous allocations can only
>>>> be reclaimed as garbage by a full GC.  I do not know if Oracle has
>>>> changed this so the smaller collections will do it or not.
>>>> 
>>>> Were any of those multiple GCs a Full GC?  If they were, then there is
>>>> probably little or no garbage to collect.  You've gotten a reply from
>>>> "Zisis T." with some possible causes for this.  I do not have anything
>>>> to add.
>>>> 
>>>> I did not know about any problems with maxRamMB ... but if I were
>>>> attempting to limit cache sizes, I would do so by the size values, not a
>>>> specific RAM size.  The size values you have chosen (8192 and 16384)
>>>> will most likely result in a total cache size well beyond the limits
>>>> you've indicated with maxRamMB.  So if there are any bugs in the code
>>>> with the maxRamMB parameter, you might end up using a LOT of memory that
>>>> you didn't expect to be using.
>>>> 
>>>> Thanks,
>>>> Shawn
>>>> 
>> 
>> 

Reply via email to