the list of IDs does change relatively frequently, but this doesn't seem to
have very much impact on the performance of the query as far as I can tell.

attached are the stacks

thanks,

steve


On Wed, Jul 31, 2013 at 6:33 AM, Mikhail Khludnev <
mkhlud...@griddynamics.com> wrote:

> On Wed, Jul 31, 2013 at 1:10 AM, Steven Bower <sbo...@alcyon.net> wrote:
>
> >
> > not sure what you mean by good hit raitio?
> >
>
> I mean such queries are really expensive (even on cache hit), so if the
> list of ids changes every time, it never hit cache and hence executes these
> heavy queries every time. It's well known performance problem.
>
>
> > Here are the stacks...
> >
> they seems like hotspots, and shows index reading that's reasonable. But I
> can't see what caused these readings, to get that I need whole stack of hot
> thread.
>
>
> >
> >   Name Time (ms) Own Time (ms)
> >
> >
> org.apache.lucene.search.MultiTermQueryWrapperFilter.getDocIdSet(AtomicReaderContext,
> > Bits) 300879 203478
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader$BlockDocsEnum.nextDoc()
> > 45539 19
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader$BlockDocsEnum.refillDocs()
> > 45519 40
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.readVIntBlock(IndexInput,
> > int[], int[], int, boolean) 24352 0
> > org.apache.lucene.store.DataInput.readVInt() 24352 24352
> > org.apache.lucene.codecs.lucene41.ForUtil.readBlock(IndexInput, byte[],
> > int[]) 21126 14976
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 6150 0              java.nio.DirectByteBuffer.get(byte[], int, int)
> > 6150 0
> > java.nio.Bits.copyToArray(long, Object, long, long, long) 6150 6150
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.docs(Bits,
> > DocsEnum, int) 35342 421
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.decodeMetaData()
> > 34920 27939
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.nextTerm(FieldInfo,
> > BlockTermState) 6980 6980
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.next()
> > 14129 1053
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadNextFloorBlock()
> > 5948 261
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadBlock()
> > 5686 199
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 3606 0              java.nio.DirectByteBuffer.get(byte[], int, int)
> > 3606 0
> > java.nio.Bits.copyToArray(long, Object, long, long, long) 3606 3606
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.readTermsBlock(IndexInput,
> > FieldInfo, BlockTermState) 1879 80
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 1798 0                java.nio.DirectByteBuffer.get(byte[], int, int)
> > 1798 0
> > java.nio.Bits.copyToArray(long, Object, long, long, long) 1798 1798
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.next()
> > 4010 3324
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.nextNonLeaf()
> > 685 685
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadBlock()
> > 3117 144
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 1861 0            java.nio.DirectByteBuffer.get(byte[], int, int) 1861
> > 0
> > java.nio.Bits.copyToArray(long, Object, long, long, long) 1861 1861
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.readTermsBlock(IndexInput,
> > FieldInfo, BlockTermState) 1090 19
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 1070 0              java.nio.DirectByteBuffer.get(byte[], int, int)
> > 1070 0
> > java.nio.Bits.copyToArray(long, Object, long, long, long) 1070 1070
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.initIndexInput()
> > 20 0            org.apache.lucene.store.ByteBufferIndexInput.clone()
> > 20 0
> > org.apache.lucene.store.ByteBufferIndexInput.clone() 20 0
> > org.apache.lucene.store.ByteBufferIndexInput.buildSlice(long, long) 20
> > 0
> > org.apache.lucene.util.WeakIdentityMap.put(Object, Object) 20 0
> >
> org.apache.lucene.util.WeakIdentityMap$IdentityWeakReference.<init>(Object,
> > ReferenceQueue) 20 0
> > java.lang.System.identityHashCode(Object) 20 20
> > org.apache.lucene.index.FilteredTermsEnum.docs(Bits, DocsEnum, int)
> > 1485 527
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.docs(Bits,
> > DocsEnum, int) 957 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.decodeMetaData()
> > 957 513
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.nextTerm(FieldInfo,
> > BlockTermState) 443 443
> > org.apache.lucene.index.FilteredTermsEnum.next() 874 324
> >
> >
> org.apache.lucene.search.NumericRangeQuery$NumericRangeTermsEnum.accept(BytesRef)
> > 368 0
> >
> >
> org.apache.lucene.util.BytesRef$UTF8SortedAsUnicodeComparator.compare(Object,
> > Object) 368 368
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.next()
> > 160 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadNextFloorBlock()
> > 160 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadBlock()
> > 160 0
> > org.apache.lucene.store.ByteBufferIndexInput.readBytes(byte[], int, int)
> > 120
> > 0
> >
> >
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader.readTermsBlock(IndexInput,
> > FieldInfo, BlockTermState) 39 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.seekCeil(BytesRef,
> > boolean) 19 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum$Frame.loadBlock()
> > 19 0
> >
> >
> org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader$SegmentTermsEnum.initIndexInput()
> > 19 0              org.apache.lucene.store.ByteBufferIndexInput.clone()
> > 19 0
> > org.apache.lucene.store.ByteBufferIndexInput.clone() 19 0
> > org.apache.lucene.store.ByteBufferIndexInput.buildSlice(long, long) 19
> > 0
> > org.apache.lucene.util.WeakIdentityMap.put(Object, Object) 19 0
> >
> org.apache.lucene.util.WeakIdentityMap$IdentityWeakReference.<init>(Object,
> > ReferenceQueue) 19 0
> > java.lang.System.identityHashCode(Object) 19 19
> > org.apache.lucene.util.FixedBitSet.<init>(int) 28 28
> >
> >
> > On Tue, Jul 30, 2013 at 4:18 PM, Mikhail Khludnev <
> > mkhlud...@griddynamics.com> wrote:
> >
> > > On Tue, Jul 30, 2013 at 12:45 AM, Steven Bower <smb-apa...@alcyon.net
> > > >wrote:
> > >
> > > >
> > > > - Most of my time (98%) is being spent in
> > > > java.nio.Bits.copyToByteArray(long,Object,long,long) which is being
> > >
> > >
> > > Steven, please
> > >
> >
> http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html.my
> > > benchmarking experience shows that NIO is a turtle, absolutely.
> > >
> > > also, are you sure that fq=(vid:86XXX73 OR vid:86XXX20 ..... has good
> hit
> > > ratio? otherwise it's a  well known beast.
> > >
> > > could you also show deeper stack, to make sure what causes to excessive
> > > reading?
> > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > > Principal Engineer,
> > > Grid Dynamics
> > >
> > > <http://www.griddynamics.com>
> > >  <mkhlud...@griddynamics.com>
> > >
> >
>
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> Principal Engineer,
> Grid Dynamics
>
> <http://www.griddynamics.com>
>  <mkhlud...@griddynamics.com>
>
Back traces

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+
|                                                                               
Name                                                                            
    |    Time (ms)     |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+
|  
+---org.apache.lucene.search.MultiTermQueryWrapperFilter.getDocIdSet(AtomicReaderContext,
 Bits)                                                                  |  
300,879  100 %  |
|    |                                                                          
                                                                                
    |                  |
|    
+---org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(AtomicReaderContext,
 boolean, boolean, Bits)                                             |          
        |
|      |                                                                        
                                                                                
    |                  |
|      
+---org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(AtomicReaderContext,
 boolean, boolean, Bits)                                                  |  
300,580   99 %  |
|      | |                                                                      
                                                                                
    |                  |
|      | +---org.apache.lucene.search.IndexSearcher.search(List, Weight, 
Collector)                                                                      
           |  207,673   69 %  |
|      | | |                                                                    
                                                                                
    |                  |
|      | | +---org.apache.lucene.search.IndexSearcher.search(Query, Filter, 
Collector)                                                                      
        |                  |
|      | |   |                                                                  
                                                                                
    |                  |
|      | |   
+---org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                               |                
  |
|      | |     |                                                                
                                                                                
    |                  |
|      | |     
+---org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                              |                 
 |
|      | |       |                                                              
                                                                                
    |                  |
|      | |       
+---org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                                 |              
    |
|      | |         |                                                            
                                                                                
    |                  |
|      | |         
+---org.apache.solr.handler.component.QueryComponent.process(ResponseBuilder)   
                                                                 |              
    |
|      | |           |                                                          
                                                                                
    |                  |
|      | |           
+---org.apache.solr.handler.component.SearchHandler.handleRequestBody(SolrQueryRequest,
 SolrQueryResponse)                                     |                  |
|      | |             |                                                        
                                                                                
    |                  |
|      | |             
+---org.apache.solr.handler.RequestHandlerBase.handleRequest(SolrQueryRequest, 
SolrQueryResponse)                                            |                 
 |
|      | |               |                                                      
                                                                                
    |                  |
|      | |               
+---org.apache.solr.core.SolrCore.execute(SolrRequestHandler, SolrQueryRequest, 
SolrQueryResponse)                                         |                  |
|      | |                 |                                                    
                                                                                
    |                  |
|      | |                 
+---org.apache.solr.servlet.SolrDispatchFilter.execute(HttpServletRequest, 
SolrRequestHandler, SolrQueryRequest, SolrQueryResponse)      |                 
 |
|      | |                   |                                                  
                                                                                
    |                  |
|      | |                   
+---org.apache.solr.servlet.SolrDispatchFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain, boolean)                         |                
  |
|      | |                     |                                                
                                                                                
    |                  |
|      | |                     
+---org.apache.solr.servlet.SolrDispatchFilter.doFilter(ServletRequest, 
ServletResponse, FilterChain)                                |                  
|
|      | |                                                                      
                                                                                
    |                  |
|      | +---org.apache.solr.search.FilterImpl$FilterSet.iterator()             
                                                                                
    |   92,906   31 %  |
|      |   |                                                                    
                                                                                
    |                  |
|      |   
+---org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(AtomicReaderContext,
 boolean, boolean, Bits)                                       |                
  |
|      |     |                                                                  
                                                                                
    |                  |
|      |     +---org.apache.lucene.search.IndexSearcher.search(List, Weight, 
Collector)                                                                      
       |                  |
|      |       |                                                                
                                                                                
    |                  |
|      |       +---org.apache.lucene.search.IndexSearcher.search(Query, Filter, 
Collector)                                                                      
    |                  |
|      |         |                                                              
                                                                                
    |                  |
|      |         
+---org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                           |                  |
|      |           |                                                            
                                                                                
    |                  |
|      |           
+---org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                          |                  |
|      |             |                                                          
                                                                                
    |                  |
|      |             
+---org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                             |                  
|
|      |               |                                                        
                                                                                
    |                  |
|      |               
+---org.apache.solr.handler.component.QueryComponent.process(ResponseBuilder)   
                                                             |                  
|
|      |                 |                                                      
                                                                                
    |                  |
|      |                 
+---org.apache.solr.handler.component.SearchHandler.handleRequestBody(SolrQueryRequest,
 SolrQueryResponse)                                 |                  |
|      |                   |                                                    
                                                                                
    |                  |
|      |                   
+---org.apache.solr.handler.RequestHandlerBase.handleRequest(SolrQueryRequest, 
SolrQueryResponse)                                        |                  |
|      |                     |                                                  
                                                                                
    |                  |
|      |                     
+---org.apache.solr.core.SolrCore.execute(SolrRequestHandler, SolrQueryRequest, 
SolrQueryResponse)                                     |                  |
|      |                       |                                                
                                                                                
    |                  |
|      |                       
+---org.apache.solr.servlet.SolrDispatchFilter.execute(HttpServletRequest, 
SolrRequestHandler, SolrQueryRequest, SolrQueryResponse)  |                  |
|      |                                                                        
                                                                                
    |                  |
|      +---org.apache.solr.search.FilterImpl$FilterSet.iterator()               
                                                                                
    |      298    0 %  |
|        |                                                                      
                                                                                
    |                  |
|        
+---org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(AtomicReaderContext,
 boolean, boolean, Bits)                                         |              
    |
|          |                                                                    
                                                                                
    |                  |
|          +---org.apache.lucene.search.IndexSearcher.search(List, Weight, 
Collector)                                                                      
         |                  |
|            |                                                                  
                                                                                
    |                  |
|            +---org.apache.lucene.search.IndexSearcher.search(Query, Filter, 
Collector)                                                                      
      |                  |
|              |                                                                
                                                                                
    |                  |
|              
+---org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                             |                  
|
|                |                                                              
                                                                                
    |                  |
|                
+---org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                            |                  |
|                  |                                                            
                                                                                
    |                  |
|                  
+---org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher$QueryResult,
 SolrIndexSearcher$QueryCommand)                               |                
  |
|                    |                                                          
                                                                                
    |                  |
|                    
+---org.apache.solr.handler.component.QueryComponent.process(ResponseBuilder)   
                                                               |                
  |
|                      |                                                        
                                                                                
    |                  |
|                      
+---org.apache.solr.handler.component.SearchHandler.handleRequestBody(SolrQueryRequest,
 SolrQueryResponse)                                   |                  |
|                        |                                                      
                                                                                
    |                  |
|                        
+---org.apache.solr.handler.RequestHandlerBase.handleRequest(SolrQueryRequest, 
SolrQueryResponse)                                          |                  |
|                          |                                                    
                                                                                
    |                  |
|                          
+---org.apache.solr.core.SolrCore.execute(SolrRequestHandler, SolrQueryRequest, 
SolrQueryResponse)                                       |                  |
|                            |                                                  
                                                                                
    |                  |
|                            
+---org.apache.solr.servlet.SolrDispatchFilter.execute(HttpServletRequest, 
SolrRequestHandler, SolrQueryRequest, SolrQueryResponse)    |                  |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------+

Generated by YourKit Java Profiler 12.0.5 Jul 31, 2013 4:31:48 PM

Reply via email to