You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Markus Jelsma <ma...@openindex.io> on 2020/10/26 12:35:46 UTC

Performance issues with CursorMark

Hello,

We have been using a simple Python tool for a long time that eases movement of data between Solr collections, it uses CursorMark to fetch small or large pieces of data. Recently it stopped working when moving data from a production collection to my local machine for testing, the Solr nodes began to run OOM.

I added 500M to the 3G heap and now it works again, but slow (240docs/s) and costing 3G of the entire heap just to move 32k docs out of 76m total.

Solr 8.6.0 is running with two shards (1 leader+1 replica), each shard has 38m docs almost no deletions (0.4%) taking up ~10.6g disk space. The documents are very small, they are logs of various interactions of users with our main text search engine.

I monitored all four nodes with VisualVM during the transfer, all four went up to 3g heap consumption very quickly. After the transfer it took a while for two nodes to (forcefully) release the no longer for the transfer needed heap space. The two other nodes, now, 17 minutes later, still think they have to hang on to their heap consumption. When i start the same transfer again, the nodes that already have high memory consumption just  seem to reuse that, not consuming additional heap. At least the second time it went 920docs/s. While we are used to transfer these tiny documents at light speed of multiple thousands per second.

What is going on? We do not need additional heap, Solr is clearly not asking for more and GC activity is minimal. Why did it become so slow? Regular queries on the collection are still going fast, but CursorMarking even through a tiny portion is taking time and memory.

Many thanks,
Markus

Re: Performance issues with CursorMark

Posted by Anshum Gupta <an...@anshumgupta.net>.
Hey Markus,

What are you sorting on? Do you have docValues enabled on the sort field ?

On Mon, Oct 26, 2020 at 5:36 AM Markus Jelsma <ma...@openindex.io>
wrote:

> Hello,
>
> We have been using a simple Python tool for a long time that eases
> movement of data between Solr collections, it uses CursorMark to fetch
> small or large pieces of data. Recently it stopped working when moving data
> from a production collection to my local machine for testing, the Solr
> nodes began to run OOM.
>
> I added 500M to the 3G heap and now it works again, but slow (240docs/s)
> and costing 3G of the entire heap just to move 32k docs out of 76m total.
>
> Solr 8.6.0 is running with two shards (1 leader+1 replica), each shard has
> 38m docs almost no deletions (0.4%) taking up ~10.6g disk space. The
> documents are very small, they are logs of various interactions of users
> with our main text search engine.
>
> I monitored all four nodes with VisualVM during the transfer, all four
> went up to 3g heap consumption very quickly. After the transfer it took a
> while for two nodes to (forcefully) release the no longer for the transfer
> needed heap space. The two other nodes, now, 17 minutes later, still think
> they have to hang on to their heap consumption. When i start the same
> transfer again, the nodes that already have high memory consumption just
> seem to reuse that, not consuming additional heap. At least the second time
> it went 920docs/s. While we are used to transfer these tiny documents at
> light speed of multiple thousands per second.
>
> What is going on? We do not need additional heap, Solr is clearly not
> asking for more and GC activity is minimal. Why did it become so slow?
> Regular queries on the collection are still going fast, but CursorMarking
> even through a tiny portion is taking time and memory.
>
> Many thanks,
> Markus
>


-- 
Anshum Gupta