Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Jena 2.11.2
-
None
-
None
Description
There appears to be a performance issue with BIND when used inside nested OPTIONALs. Affected queries fail to time out.
The following patterns appear to be affected:
OPTIONAL { ... OPTIONAL { ... BIND ( ... ) } } OPTIONAL { ... OPTIONAL { ... } BIND ( ... ) }
The following patterns appear to be unaffected:
OPTIONAL { ... OPTIONAL { ... } } BIND ( ... ) OPTIONAL { ... BIND ( ... ) } OPTIONAL { ... } BIND ( ... )
So far, users have been able to work around the performance issue by rewriting their queries. However, the timeout failure is still a significant reliability issue, since affected queries consume resources and can run indefinitely. I've attached a testcase that exhibits the performance and timeout problems. Reproduced with a recent 2.13.0-SNAPSHOT build.
Execution Timeout (ms): 30000 Query: PREFIX ex: <http://example.com/> SELECT ?s ?valueA { OPTIONAL { ?s ex:propA ?a . OPTIONAL { ?a ex:label ?labelA . } } BIND ( IF ( BOUND (?labelA), ?labelA, ?a) as ?valueA) } Execution time (ms): 586 Execution time (ms): 143 Query: PREFIX ex: <http://example.com/> SELECT ?s ?valueA { OPTIONAL { ?s ex:propA ?a . OPTIONAL { ?a ex:label ?labelA . } BIND ( IF ( BOUND (?labelA), ?labelA, ?a) as ?valueA) } } Execution time (ms): 110922 Execution time (ms): 41004
Attachments
Attachments
Issue Links
- is related to
-
JENA-1023 Algebra execution join library
- Closed