Return-Path: Delivered-To: apmail-lucene-java-dev-archive@www.apache.org Received: (qmail 91064 invoked from network); 7 Feb 2009 15:38:51 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Feb 2009 15:38:51 -0000 Received: (qmail 3755 invoked by uid 500); 7 Feb 2009 15:38:45 -0000 Delivered-To: apmail-lucene-java-dev-archive@lucene.apache.org Received: (qmail 3714 invoked by uid 500); 7 Feb 2009 15:38:45 -0000 Mailing-List: contact java-dev-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@lucene.apache.org Delivered-To: mailing list java-dev@lucene.apache.org Received: (qmail 3705 invoked by uid 99); 7 Feb 2009 15:38:45 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 07 Feb 2009 07:38:45 -0800 X-ASF-Spam-Status: No, hits=1.2 required=10.0 tests=SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [74.125.44.30] (HELO yx-out-2324.google.com) (74.125.44.30) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 07 Feb 2009 15:38:37 +0000 Received: by yx-out-2324.google.com with SMTP id 3so469898yxj.5 for ; Sat, 07 Feb 2009 07:38:14 -0800 (PST) Received: by 10.150.205.13 with SMTP id c13mr1817371ybg.151.1234021094508; Sat, 07 Feb 2009 07:38:14 -0800 (PST) Received: from ?10.17.4.4? (pool-173-48-164-75.bstnma.fios.verizon.net [173.48.164.75]) by mx.google.com with ESMTPS id z26sm6207833ele.0.2009.02.07.07.38.13 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 07 Feb 2009 07:38:14 -0800 (PST) Message-Id: From: Michael McCandless To: java-dev@lucene.apache.org In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [jira] Resolved: (LUCENE-1316) Avoidable synchronization bottleneck in MatchAlldocsQuery$MatchAllScorer Date: Sat, 7 Feb 2009 10:38:12 -0500 References: <545915468.1214409524974.JavaMail.jira@brutus> <276167189.1232894460193.JavaMail.jira@brutus> <048947B9-AB7B-4B33-AA9D-F0CDFFF77413@mikemccandless.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Checked: Checked by ClamAV on apache.org Hi Peter, You'll definitely need to start from the full patch in LUCENE-1316, which fixes SegmentReader & Multi*Reader to use AllTermDocs when given a null Term. Mike Peter Keegan wrote: > Hi Mike, > > Is this patch self contained or do I need the other patches from > LUCENE-1316? > I tried just this patch, but I get a NPE in MultiSegment Reader > (current = null): > > at org.apache.lucene.index.MultiSegmentReader > $MultiTermDocs.doc(MultiSegmentReader.java:531) > at org.apache.lucene.search.function.ValueSourceQuery > $ValueSourceScorer.score(ValueSourceQuery.java:142) > at org.apache.lucene.search.function.CustomScoreQuery > $CustomScorer.score(CustomScoreQuery.java:389) > at org.apache.lucene.search.Scorer.score(Scorer.java:58) > at > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:146) > at org.apache.lucene.search.Searcher.search(Searcher.java:118) > > Peter > > > On Fri, Feb 6, 2009 at 7:13 PM, Michael McCandless > wrote: > > OK I just put the patch on there -- let me know. Thanks, > > Mike > > > Peter Keegan wrote: > > Thanks, Mike. I'll be happy to help test the patch. > > Peter > > On Fri, Feb 6, 2009 at 6:44 PM, Michael McCandless > wrote: > > OK I created https://issues.apache.org/jira/browse/LUCENE-1538. > > Mike > > > Peter Keegan wrote: > > I just ran into the same bottleneck with ValueSourceScorer. > Here's a stack trace: > > Name: QueryThread group 1,#4 > State: BLOCKED on org.apache.lucene.index.SegmentReader@49d7fb83 > owned by: QueryThread group 1,#8 > Total blocked: 1,535,881 Total waited: 1,080 > > Stack trace: > org.apache.lucene.index.SegmentReader.isDeleted(SegmentReader.java: > 663) > org.apache.lucene.index.MultiReader.isDeleted(MultiReader.java:221) > org.apache.lucene.search.function.ValueSourceQuery > $ValueSourceScorer.next(ValueSourceQuery.java:138) > org.apache.lucene.search.function.ValueSourceQuery > $ValueSourceScorer.skipTo(ValueSourceQuery.java:159) > org.apache.lucene.search.function.CustomScoreQuery > $CustomScorer.skipTo(CustomScoreQuery.java:399) > org > .apache > .lucene.search.ConjunctionScorer.doNext(ConjunctionScorer.java:59) > org > .apache.lucene.search.ConjunctionScorer.next(ConjunctionScorer.java: > 51) > org.apache.lucene.search.BooleanScorer2.score(BooleanScorer2.java:319) > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:146) > org.apache.lucene.search.Searcher.search(Searcher.java:118) > > Peter > > > On Sun, Jan 25, 2009 at 9:41 AM, Michael McCandless (JIRA) > wrote: > > [ https://issues.apache.org/jira/browse/LUCENE-1316?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel > ] > > Michael McCandless resolved LUCENE-1316. > ---------------------------------------- > > Resolution: Fixed > > Committed revision 737513. Thanks everyone! > > > Avoidable synchronization bottleneck in MatchAlldocsQuery > $MatchAllScorer > > > ------------------------------------------------------------------------ > > > > Key: LUCENE-1316 > > URL: https://issues.apache.org/jira/browse/LUCENE-1316 > > Project: Lucene - Java > > Issue Type: Bug > > Components: Query/Scoring > > Affects Versions: 2.3 > > Environment: All > > Reporter: Todd Feak > > Assignee: Michael McCandless > > Priority: Minor > > Fix For: 2.9 > > > > Attachments: LUCENE-1316.patch, LUCENE-1316.patch, > LUCENE-1316.patch, LUCENE_1316.patch, LUCENE_1316.patch, > LUCENE_1316.patch, MatchAllDocsQuery.java > > > > Original Estimate: 1h > > Remaining Estimate: 1h > > > > The isDeleted() method on IndexReader has been mentioned a number > of times as a potential synchronization bottleneck. However, the > reason this bottleneck occurs is actually at a higher level that > wasn't focused on (at least in the threads I read). > > In every case I saw where a stack trace was provided to show the > lock/block, higher in the stack you see the MatchAllScorer.next() > method. In Solr paricularly, this scorer is used for "NOT" queries. > We saw incredibly poor performance (order of magnitude) on our load > tests for NOT queries, due to this bottleneck. The problem is that > every single document is run through this isDeleted() method, which > is synchronized. Having an optimized index exacerbates this issues, > as there is only a single SegmentReader to synchronize on, causing a > major thread pileup waiting for the lock. > > By simply having the MatchAllScorer see if there have been any > deletions in the reader, much of this can be avoided. Especially in > a read-only environment for production where you have slaves doing > all the high load searching. > > I modified line 67 in the MatchAllDocsQuery > > FROM: > > if (!reader.isDeleted(id)) { > > TO: > > if (!reader.hasDeletions() || !reader.isDeleted(id)) { > > In our micro load test for NOT queries only, this was a major > performance improvement. We also got the same query results. I > don't believe this will improve the situation for indexes that have > deletions. > > Please consider making this adjustment for a future bug fix release. > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org > For additional commands, e-mail: java-dev-help@lucene.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org > For additional commands, e-mail: java-dev-help@lucene.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org > For additional commands, e-mail: java-dev-help@lucene.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org For additional commands, e-mail: java-dev-help@lucene.apache.org