3

我们正在微调我们的应用程序,我正在找出方法调用之间的时间延迟。该方法可以是函数调用或休息过程。

let $x := fn:current-time()
let $re := xdmp:http-post('http://www.somerestdomain.com',())
let $y := fn:currrent-time()
return $x - $y

or

let $x := fn:current-time()
let $re := domain:call-some-long-running-function()
let $y := fn:currrent-time()
return $x - $y

分析这向我展示了 XQuery 引擎优化fn:current-time()调用并始终将 $x 和 $y 分配为相同的值。

我发现这个示例代码对 MarkLogic http://en.wikibooks.org/wiki/XQuery/Uptime_monitor也有一些问题

我们正在使用 MarkLogic Xml 数据库,上面提到的伪代码是指 MarkLogic API

有没有办法找出 XQuery TimeOut ?

4

2 回答 2

3

如果我没记错的话,请使用4.2 中引入的新功能xdmp:elapsed-time()来代替。current-time()

正如 Scott 在上面的评论中所解释的那样,current-time()它是稳定的,并且会在一次运行中返回相同的值,除非您使用 using xdmp:eval(),但这只会大大降低您的代码速度。

除此之外,还有一种从查询中获取时间信息的通用方法。最简单的方法是将部分相关代码复制到 CQ ( http://developer.marklogic.com/code/cq ) 中,然后点击其中的Profile按钮。在使用 Profile 库 ( http://developer.marklogic.com/pubs/5.0/apidocs/ProfileBuiltins.html ) 中的函数的底层。这些返回一个包含大量时间信息的 html 表。对于优化 MarkLogic Server 中的代码非常有价值。

于 2011-12-09T18:56:52.427 回答
2

MarkLogic 使用多版本并发,基本上这意味着每个事务将时钟增加 1 个周期。由于 $x 和 $y 在同一个事务中,因此您将始终返回相同的时间戳。

尝试以下诊断功能。

(xdmp:http-get("http://www.marklogic.com"), xdmp:query-meters())

这将返回您的查询结果和有关您的查询的一些诊断信息。在你的情况下,它会是这样的..

(xdmp:http-post('http://www.somerestdomain.com',()), xdmp:query-meters())
于 2011-03-08T19:44:46.273 回答