bq: but it should be more or less a constant factor no matter how many
Solr nodes you are using, right?

Not really. You've stated that you're not driving Solr very hard in
your tests. Therefore you're waiting on I/O. Therefore your tests just
aren't going to scale linearly with the number of shards. This is a
simplification, but....

Your network utilization is pretty much irrelevant. I send a packet
somewhere. "somewhere" does some stuff and sends me back an
acknowledgement. While I'm waiting, the network is getting no traffic,
so..... If the network traffic was in the 90% range that would be
different, so it's a good thing to monitor.

Really, use a "leader aware" client and rack enough clients together
that you're driving Solr hard. Then double the number of shards. Then
rack enough _more_ clients to drive Solr at the same level. In this
case I'll go out on a limb and predict near 2x throughput increases.

One additional note, though. When you add _replicas_ to shards expect
to see a drop in throughput that may be quite significant, 20-40%
anecdotally...

Best,
Erick

On Sat, Nov 1, 2014 at 9:23 AM, Shawn Heisey <apa...@elyograg.org> wrote:
> On 11/1/2014 9:52 AM, Ian Rose wrote:
>> Just to make sure I am thinking about this right: batching will certainly
>> make a big difference in performance, but it should be more or less a
>> constant factor no matter how many Solr nodes you are using, right?  Right
>> now in my load tests, I'm not actually that concerned about the absolute
>> performance numbers; instead I'm just trying to figure out why relative
>> performance (no matter how bad it is since I am not batching) does not go
>> up with more Solr nodes.  Once I get that part figured out and we are
>> seeing more writes per sec when we add nodes, then I'll turn on batching in
>> the client to see what kind of additional performance gain that gets us.
>
> The basic problem I see with your methodology is that you are sending an
> update request and waiting for it to complete before sending another.
> No matter how big the batches are, this is an inefficient use of resources.
>
> If you send many such requests at the same time, then they will be
> handled in parallel.  Lucene (and by extension, Solr) has the thread
> synchronization required to keep multiple simultaneous update requests
> from stomping on each other and corrupting the index.
>
> If you have enough CPU cores, such handling will *truly* be in parallel,
> otherwise the operating system will just take turns giving each thread
> CPU time.  This results in a pretty good facsimile of parallel
> operation, but because it splits the available CPU resources, isn't as
> fast as true parallel operation.
>
> Thanks,
> Shawn
>

Reply via email to