[ 
https://issues.apache.org/jira/browse/JENA-1121?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15132383#comment-15132383
 ] 

Benjamin Geer commented on JENA-1121:
-------------------------------------

(1) Testing the original query on a different machine, with Fuseki 2.3.0 I get:

55 ms with MINUS
8.5 s with FILTER NOT EXISTS

With Fuseki 2.3.1 I get:

11.4 s with MINUS
8.9 s with FILTER NOT EXISTS

One of the rules of thumb we've learned from working with different 
triplestores is that FILTER NOT EXISTS is almost always several orders of 
magnitude slower than MINUS, as it is with Fuseki 2.3.0 here. For this reason, 
we avoid FILTER NOT EXISTS whenever possible.

(2)

20 ms with Fuseki 2.3.0
60 ms with Fuseki 2.3.1

Another thing we noticed when switching from Fuseki 2.3.0 to 2.3.1 is that the 
performance of 2.3.1 seems much more sensitive to the exact position of MINUS 
clauses. In 2.3.0, it didn't seem to matter where we put them, but in 2.3.1, 
putting them a bit earlier or a bit later in the query made a big difference in 
performance (though we could never get them to perform as well as in 2.3.0, 
regardless of where we put them). It's as if 2.3.0 is better at optimising 
MINUS clauses as part of a larger graph pattern. I can open another issue with 
examples if you like.

> Performance regression in Jena 3.0.1 / Fuseki 2.3.1
> ---------------------------------------------------
>
>                 Key: JENA-1121
>                 URL: https://issues.apache.org/jira/browse/JENA-1121
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: Jena
>    Affects Versions: Jena 3.0.1, Fuseki 2.3.1, Jena 3.1.0, Fuseki 2.4.0
>         Environment: Mac OS X 10.10.5, iMac, 3.4 GHz Intel Core i7, 32 GB RAM
>            Reporter: Benjamin Geer
>            Priority: Critical
>              Labels: performance
>
> We seem to have encountered a severe performance regression in Jena 3.0.1 / 
> Fuseki 2.3.1 as compared with Jena 3.0.0 / Fuseki 2.3.0. A number of our 
> queries are running between 2 and 20 times slower. Here's one small example 
> with configuration for Fuseki. With Fuseki 2.3.0, the query below takes about 
> 200 milliseconds. With Fuseki 2.3.1, it takes 9 seconds. I've also tried it 
> with the latest Fuseki snapshot 
> (apache-jena-fuseki-2.4.0-20160117.183513-33.zip), and got the same result as 
> with the 2.3.1 release.
> Here's the test data and configuration:
> https://www.dropbox.com/s/b9aepexij5e7noj/jena-performance-test.zip?dl=0
> Here's the query:
> {noformat}
> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> prefix knora-base: <http://www.knora.org/ontology/knora-base#>
> SELECT DISTINCT
>     ?resourceIri
>     ?resourceLabel
>     (SAMPLE(?anyMatch) AS ?match)
> WHERE {
>     BIND(STR("de") AS ?preferredLanguage)
>     BIND(STR("en") AS ?fallbackLanguage)
>     ?s <http://jena.apache.org/text#query> 'Zeitglöcklein' .
>     MINUS {
>         ?s knora-base:isDeleted true .
>     }
>     OPTIONAL {
>         ?s a ?valueObjectType .
>         ?valueObjectType rdfs:subClassOf+ knora-base:Value .
>         ?resIri ?resourceProperty ?s .
>         ?s knora-base:valueHasString ?literal .
>         OPTIONAL {
>             ?resourceProperty rdfs:label 
> ?preferredLanguageResourcePropertyLabel .
>             FILTER (LANG(?preferredLanguageResourcePropertyLabel) = 
> ?preferredLanguage) .
>         }
>         OPTIONAL {
>             ?resourceProperty rdfs:label 
> ?fallbackLanguageResourcePropertyLabel .
>             FILTER (LANG(?fallbackLanguageResourcePropertyLabel) = 
> ?fallbackLanguage) .
>         }
>         OPTIONAL {
>             ?resourceProperty rdfs:label ?anyLanguageResourcePropertyLabel .
>         }
>         BIND(COALESCE(str(?preferredLanguageResourcePropertyLabel), 
> str(?fallbackLanguageResourcePropertyLabel), 
> str(?anyLanguageResourcePropertyLabel)) AS ?propertyLabel)
>         BIND(CONCAT(STR(?valueObjectType), "|", STR(?propertyLabel), "|", 
> STR(?literal)) AS ?anyMatch)
>         MINUS {
>             ?resIri knora-base:isDeleted true .
>         }
>     }
>     BIND(COALESCE(?resIri, ?s) AS ?resourceIri)
>     ?resourceIri a ?resourceClass .
>     ?resourceClass rdfs:subClassOf+ knora-base:Resource .
>     ?resourceIri rdfs:label ?resourceLabel .
> }
> GROUP BY
>     ?resourceIri
>     ?resourceLabel
> ORDER BY ?resourceIri
> {noformat}
> Best regards,
> Benjamin Geer



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to