Hi,

I have question regarding parallel processing of requests.

We use the following (simplified) code to run fulltext searches on multiple databases with xquery:fork-join() in parallel.
The performance is tracked and logged with prof:time().


declare function documents:search-dbs($dbs as xs:string*, $query as xs:string) as element()*
{
    let $funcs := for $db in $dbs return function() {
        documents:search-db($db, $query)
    }
    return xquery:fork-join($funcs)
};

declare function documents:search-db($db as xs:string, $query as xs:string) as element()*
{
    let $data := prof:time(
        (: Run fulltext search on database here :)
        (), 'documents:search-db(' || $db || ') '
    )
    return $data
};

The log output looks like this:

17:58:54.125      SERVER      admin TRACE documents:search-db(MD) 127.19 ms   
17:58:54.139      SERVER      admin TRACE documents:search-db(OEM) 142.39 ms  
17:58:54.226      SERVER      admin TRACE documents:search-db(CS) 229.55 ms   
17:58:54.485      SERVER      admin TRACE documents:search-db(TEST) 487.16 ms 
17:58:54.989      SERVER      admin TRACE documents:search-db(ALL) 991.72 ms  
17:58:55.205      SERVER      admin TRACE documents:search-db(POC) 1206.7 ms  
17:58:56.461      SERVER      admin TRACE documents:search-db(RO) 2462.38 ms  
17:59:00.964      SERVER      admin TRACE documents:search-db(US) 6965.86 ms  
17:59:01.424      SERVER      admin TRACE documents:search-db(PT) 7425.54 ms  
17:59:02.260      SERVER      admin TRACE documents:search-db(MI) 8262.05 ms  
17:59:04.142      SERVER      admin TRACE documents:search-db(XP) 10144.15 ms 
17:59:05.300      SERVER      admin TRACE documents:search-db(AT) 11301.95 ms 
17:59:06.353      SERVER      admin TRACE documents:search-db(CT) 12356.84 ms 
17:59:12.157      SERVER      admin TRACE documents:search-db(MR) 18158.48 ms 
17:59:14.042      SERVER      admin TRACE documents:search-db(LS) 20043.82 ms 
17:59:14.999      SERVER      admin TRACE documents:search-db(DA) 21000.18 ms 

To me it seems that the requests are not done in parallel. The request time is always cumulative.

Questions:
- Is this just an issue of the prof:time() logging?
- Do the searches really run in parallel?
- Or are they maybe blocked and serialized by some database lock?


Any help to analyse this will be appreciated.

Best Regards
Johannes