Oh, what a lovely anti-pattern! Every second, you're throwing away your
filterCache. And then firing up to 4096 autowarm queries at your index
on the filterCache. And this doesn't even consider the other caches! And
this will get worse with time after restarts if my scenario is accurate.

Having extremely fast autocommit times is fundamentally incompatible
with having large caches. More hardware simply won't help unless
you have so much hardware that you're storing a tiny number of docs
on each shard, which is a ridiculous solution. IMO your only choices
are to
1> drastically reduce your autowarm counts (which, btw, means that
    you can also drastically reduce their size)
or
2> drastically increase your commit interval and live with 15 minute
     warmup times.

I've never seen autowarm counts that high really do much good anyway.
For that matter, the raw size of your caches is also far too large IMO.
If you're really generating that many unique filter queries, I'd argue
you've got something pathological in your setup.

What you are _not_ going to be able to do is have autowarm counts
that high and 1 second commits.

Here's the long form. I don't know how many entries are in your various
caches, but I bet it's a lot. Note that it picks on filterCache, but the
same logic applies to your other caches, i.e. queryResultCache
in particular.

Your new searcher isn't serving any queries until up to 4096 autowarm
queries are executed. Which you're then immediately throwing
away due to your soft commit interval. I rather suspect you'll be seeing
log messages about "too many on deck searchers" or some such due
to this setting in solrconfig.xml:

<maxWarmingSearchers>2</maxWarmingSearchers>

Do not think you can up this number and cure your problem, you'll
hit OOMs I predict if you do.

Now, here's the kicker. Your filterCache is going to accumulate
entries _because_ of autowarming! Imagine that every second you're
adding 10 new fq clauses that are unique.

Now, when the first soft commit happens, your filterCache has 10
entries in it. The autowarm kicks in and puts those same 10 in
your filterCache and the searcher opens for business.

A second later, another 10 fq clauses have come in and been put
in your filterCache. And another searcher is opened. And now there
are 20 entries. All of which are autowarmed and put back in the
filterCache.

A second later there are 30 entries in your filterCache. A second
after that 40. And so on. If this guess is correct, then if you
restart all your servers your interval between when you index a
doc and can search it will start out OK, but then increase.

Eventually you get to the situation you have now, a huge number
of autowarming queries that take minutes to warm before you can
see any of your recently added documents.

Places to look to see what's happening:

admin/plugins-stats/core. you should see "warmupTime" near the bottom.
admin/plugins-stats/cache/filter cache. You should see warmupTime there too.
                                         /document cache etc.

While you're at the filter cache stats page, take a look at your hit ratio,
I suspect it's very small. If so, it's not doing you much good anyway.

BTW, one way of adding completely useless (but unique) fq clauses is
to follow another anti-pattern like:

fq=timestamp:[NOW/DAY to NOW]

http://searchhub.org/2012/02/23/date-math-now-and-filter-queries/

On Thu, Aug 14, 2014 at 7:21 AM, cwhit <cwhi...@solinkcorp.com> wrote:
> Thanks for the explanation.  This makes a lot of sense to me... I'm wondering
> if there's a way to get the best of both worlds.  Can throwing more hardware
> at the index give real time updates + a large LRU cache?  Would we be CPU
> bound at this point?
>
>
>
> --
> View this message in context: 
> http://lucene.472066.n3.nabble.com/Updates-to-index-not-available-immediately-as-index-scales-even-with-autoSoftCommit-at-1-second-tp4152511p4152983.html
> Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to