This is very strange. I'd expect slow queries on the first few queries while these caches were warmed, but after that I'd expect things to be quite fast.
For a 12G index and 256G RAM, you have on the surface a LOT of hardware to throw at this problem. You can _try_ giving the JVM, say, 18G but that really shouldn't be a big issue, your index files should be MMaped. Let's try the crude thing first and give the JVM more memory. FWIW Erick On Mon, Jul 29, 2013 at 4:45 PM, Steven Bower <smb-apa...@alcyon.net> wrote: > I've been doing some performance analysis of a spacial search use case I'm > implementing in Solr 4.3.0. Basically I'm seeing search times alot higher > than I'd like them to be and I'm hoping people may have some suggestions > for how to optimize further. > > Here are the specs of what I'm doing now: > > Machine: > - 16 cores @ 2.8ghz > - 256gb RAM > - 1TB (RAID 1+0 on 10 SSD) > > Content: > - 45M docs (not very big only a few fields with no large textual content) > - 1 geo field (using config below) > - index is 12gb > - 1 shard > - Using MMapDirectory > > Field config: > > <fieldType name="geo" class="solr.SpatialRecursivePrefixTreeFieldType" > distErrPct="0.025" maxDistErr="0.00045" > spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory" > units="degrees"/> > > <field name="geopoint" indexed="true" multiValued="false" > required="false" stored="true" type="geo"/> > > > What I've figured out so far: > > - Most of my time (98%) is being spent in > java.nio.Bits.copyToByteArray(long,Object,long,long) which is being > driven by BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadBlock() > which from what I gather is basically reading terms from the .tim file > in blocks > > - I moved from Java 1.6 to 1.7 based upon what I read here: > http://blog.vlad1.com/2011/10/05/looking-at-java-nio-buffer-performance/ > and it definitely had some positive impact (i haven't been able to > measure this independantly yet) > > - I changed maxDistErr from 0.000009 (which is 1m precision per docs) > to 0.00045 (50m precision) .. > > - It looks to me that the .tim file are being memory mapped fully (ie > they show up in pmap output) the virtual size of the jvm is ~18gb > (heap is 6gb) > > - I've optimized the index but this doesn't have a dramatic impact on > performance > > Changing the precision and the JVM upgrade yielded a drop from ~18s > avg query time to ~9s avg query time.. This is fantastic but I want to > get this down into the 1-2 second range. > > At this point it seems that basically i am bottle-necked on basically > copying memory out of the mapped .tim file which leads me to think > that the only solution to my problem would be to read less data or > somehow read it more efficiently.. > > If anyone has any suggestions of where to go with this I'd love to know > > > thanks, > > steve