Tracking xquery:fork-join()

Wednesday, 13 August 2025 · 1 message
JB
Johannes Bauer13 Aug 2025 08:00 #
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

⚡Generated with XQuery