[ https://issues.apache.org/jira/browse/SOLR-2493?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13028975#comment-13028975 ]
Uwe Schindler commented on SOLR-2493: ------------------------------------- bq. The cause of the problem came from needing public access to a "getLuceneVersion" type method on SolrConfig (which is a subclass of Config) This is not true. getLuceneVersion is in Config not SolrConfig and its public like all the other getXxx() methods. Version is just a datatype like int/float/String. Thats all. In general the bad thing about the whole config stuff in solr is mixing parsing and value holder. This should theoretically separate classes. So SolrConfig has no parse methods at all. In its ctor it would simply instantiate the ConfigParser (name the class like that) and use it to set the values in SolrConfig. That would be cotrrect design. The good thing with this design: One could instantiate a SolrConfig and populate it programmatically or via a JSON parser or whatever. > SolrQueryParser constantly parse luceneMatchVersion in solrconfig. Large > performance hit. > ----------------------------------------------------------------------------------------- > > Key: SOLR-2493 > URL: https://issues.apache.org/jira/browse/SOLR-2493 > Project: Solr > Issue Type: Bug > Components: search > Affects Versions: 3.1 > Reporter: Stephane Bailliez > Assignee: Uwe Schindler > Priority: Blocker > Labels: core, parser, performance, request, solr > Fix For: 3.1.1, 3.2, 4.0 > > Attachments: SOLR-2493-3.x.patch, SOLR-2493.patch > > > I' m putting this as blocker as I think this is a serious issue that should > be adressed asap with a release. With the current code this is no way near > suitable for production use. > For each instance created SolrQueryParser calls > > getSchema().getSolrConfig().getLuceneVersion("luceneMatchVersion", > Version.LUCENE_24) > instead of using > getSchema().getSolrConfig().luceneMatchVersion > This creates a massive performance hit. For each request, there is generally > 3 query parsers created and each of them will parse the xml node in config > which involve creating an instance of XPath and behind the scene the usual > factory finder pattern quicks in within the xml parser and does a loadClass. > The stack is typically: > at > org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363) > at > com.sun.org.apache.xml.internal.dtm.ObjectFactory.findProviderClass(ObjectFactory.java:506) > at > com.sun.org.apache.xml.internal.dtm.ObjectFactory.lookUpFactoryClass(ObjectFactory.java:217) > at > com.sun.org.apache.xml.internal.dtm.ObjectFactory.createObject(ObjectFactory.java:131) > at > com.sun.org.apache.xml.internal.dtm.ObjectFactory.createObject(ObjectFactory.java:101) > at > com.sun.org.apache.xml.internal.dtm.DTMManager.newInstance(DTMManager.java:135) > at > com.sun.org.apache.xpath.internal.XPathContext.<init>(XPathContext.java:100) > at > com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:201) > at > com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275) > at org.apache.solr.core.Config.getNode(Config.java:230) > at org.apache.solr.core.Config.getVal(Config.java:256) > at org.apache.solr.core.Config.getLuceneVersion(Config.java:325) > at > org.apache.solr.search.SolrQueryParser.<init>(SolrQueryParser.java:76) > at > org.apache.solr.schema.IndexSchema.getSolrQueryParser(IndexSchema.java:277) > With the current 3.1 code, I do barely 250 qps with 16 concurrent users with > a near empty index. > Switching SolrQueryParser to use > getSchema().getSolrConfig().luceneMatchVersion and doing a quick bench test, > performance become reasonable beyond 2000 qps. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org