Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Abandoned
-
Jena 3.0.1, Fuseki 2.3.1, Jena 3.1.0, Fuseki 2.4.0
-
None
-
Mac OS X 10.10.5, iMac, 3.4 GHz Intel Core i7, 32 GB RAM
Description
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:
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
Best regards,
Benjamin Geer