what's the value of rows param
http://wiki.apache.org/solr/CommonQueryParameters#rows ?

On Fri, Oct 5, 2012 at 6:56 AM, Aaron Daubman <daub...@gmail.com> wrote:

> Greetings,
>
> I've been seeing this call chain come up fairly frequently when
> debugging longer-QTime queries under Solr 3.6.1 but have not been able
> to understand from the code what is really going on - the call graph
> and code follow below.
>
> Would somebody please explain to me:
> 1) Why this would show up frequently as a hotspot
> 2) If it is expected to do so
> 3) If there is anything I should look in to that may help performance
> where this frequently shows up as the long pole in the QTime tent
> 4) What the code is doing and why heap is being allocated as an
> apparently giant object (which also is apparently not unheard of due
> to MAX_VALUE wrapping check)
>
> ---call-graph---
> Filter - SolrDispatchFilter:doFilter (method time = 12 ms, total time =
> 487 ms)
>  Filter - SolrDispatchFilter:execute:365 (method time = 0 ms, total
> time = 109 ms)
>   org.apache.solr.core.SolrCore:execute:1376 (method time = 0 ms,
> total time = 109 ms)
>    org.apache.solr.handler.RequestHandlerBase:handleRequest:129
> (method time = 0 ms, total time = 109 ms)
>     org.apache.solr.handler.component.SearchHandler:handleRequestBody:186
> (method time = 0 ms, total time = 109 ms)
>      com.echonest.solr.component.EchoArtistGroupingComponent:process:188
> (method time = 0 ms, total time = 109 ms)
>       org.apache.solr.search.SolrIndexSearcher:search:375 (method time
> = 0 ms, total time = 96 ms)
>        org.apache.solr.search.SolrIndexSearcher:getDocListC:1176
> (method time = 0 ms, total time = 96 ms)
>         org.apache.solr.search.SolrIndexSearcher:getDocListNC:1209
> (method time = 0 ms, total time = 96 ms)
>          org.apache.solr.search.SolrIndexSearcher:getProcessedFilter:796
> (method time = 0 ms, total time = 26 ms)
>           org.apache.solr.search.BitDocSet:andNot:185 (method time = 0
> ms, total time = 13 ms)
>            org.apache.lucene.util.OpenBitSet:clone:732 (method time =
> 13 ms, total time = 13 ms)
>           org.apache.solr.search.BitDocSet:intersection:31 (method
> time = 0 ms, total time = 13 ms)
>            org.apache.solr.search.DocSetBase:intersection:90 (method
> time = 0 ms, total time = 13 ms)
>             org.apache.lucene.util.OpenBitSet:and:808 (method time =
> 13 ms, total time = 13 ms)
>          org.apache.lucene.search.TopFieldCollector:create:916 (method
> time = 0 ms, total time = 46 ms)
>           org.apache.lucene.search.FieldValueHitQueue:create:175
> (method time = 0 ms, total time = 46 ms)
>
>  
> org.apache.lucene.search.FieldValueHitQueue$MultiComparatorsFieldValueHitQueue:<init>:111
> (method time = 0 ms, total time = 46 ms)
>             org.apache.lucene.search.SortField:getComparator:409
> (method time = 0 ms, total time = 13 ms)
>
>  org.apache.lucene.search.FieldComparator$FloatComparator:<init>:400
> (method time = 13 ms, total time = 13 ms)
>             org.apache.lucene.util.PriorityQueue:initialize:108
> (method time = 33 ms, total time = 33 ms)
> ---snip---
>
>
> org.apache.lucene.util.PriorityQueue:initialize - hotspot is line 108:
>     heap = (T[]) new Object[heapSize]; // T is unbounded type, so this
> unchecked cast works always
>
> ---PriorityQueue.java---
>   /** Subclass constructors must call this. */
>   @SuppressWarnings("unchecked")
>   protected final void initialize(int maxSize) {
>     size = 0;
>     int heapSize;
>     if (0 == maxSize)
>       // We allocate 1 extra to avoid if statement in top()
>       heapSize = 2;
>     else {
>       if (maxSize == Integer.MAX_VALUE) {
>         // Don't wrap heapSize to -1, in this case, which
>         // causes a confusing NegativeArraySizeException.
>         // Note that very likely this will simply then hit
>         // an OOME, but at least that's more indicative to
>         // caller that this values is too big.  We don't +1
>         // in this case, but it's very unlikely in practice
>         // one will actually insert this many objects into
>         // the PQ:
>         heapSize = Integer.MAX_VALUE;
>       } else {
>         // NOTE: we add +1 because all access to heap is
>         // 1-based not 0-based.  heap[0] is unused.
>         heapSize = maxSize + 1;
>       }
>     }
>     heap = (T[]) new Object[heapSize]; // T is unbounded type, so this
> unchecked cast works always
>     this.maxSize = maxSize;
>
>     // If sentinel objects are supported, populate the queue with them
>     T sentinel = getSentinelObject();
>     if (sentinel != null) {
>       heap[1] = sentinel;
>       for (int i = 2; i < heap.length; i++) {
>         heap[i] = getSentinelObject();
>       }
>       size = maxSize;
>     }
>   }
> ---snip---
>
>
> Thanks, as always!
>      Aaron
>



-- 
Sincerely yours
Mikhail Khludnev
Tech Lead
Grid Dynamics

<http://www.griddynamics.com>
 <mkhlud...@griddynamics.com>

Reply via email to