On 11/5/2017 12:20 PM, Chris Troullis wrote:
> The issue I am seeing is when some
> threads are adding/updating documents while other threads are issuing
> deletes (using deleteByQuery), solr seems to get into a state of extreme
> blocking on the replica

The deleteByQuery operation cannot coexist very well with other indexing
operations.  Let me tell you about something I discovered.  I think your
problem is very similar.

Solr 4.0 and later is supposed to be able to handle indexing operations
at the same time that the index is being optimized (in Lucene,
forceMerge).  I have some indexes that take about two hours to optimize,
so having indexing stop while that happens is a less than ideal
situation.  Ongoing indexing is similar in many ways to a merge, enough
that it is handled by the same Merge Scheduler that handles an optimize.

I could indeed add documents to the index without issues at the same
time as an optimize, but when I would try my full indexing cycle while
an optimize was underway, I found that all operations stopped until the
optimize finished.

Ultimately what was determined (I think it was Yonik that figured it
out) was that *most* indexing operations can happen during the optimize,
*except* for deleteByQuery.  The deleteById operation works just fine.

I do not understand the low-level reasons for this, but apparently it's
not something that can be easily fixed.

A workaround is to send the query you plan to use with deleteByQuery as
a standard query with a limited fl parameter, to retrieve matching
uniqueKey values from the index, then do a deleteById with that list of
ID values instead.

Thanks,
Shawn

Reply via email to