XQuery - 通过REST调用或方法调用记录的时间

时间:2011-03-08 18:34:16

标签: xquery marklogic

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

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?

2 个答案:

答案 0 :(得分:3)

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

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

接下来, 是从查询中获取计时信息的通用方法。最简单的方法是将相关代码的一部分复制到CQ(http://developer.marklogic.com/code/cq),然后点击那里的Profile按钮。在使用配置文件库(http://developer.marklogic.com/pubs/5.0/apidocs/ProfileBuiltins.html)中的功能的引擎下。这些返回一个包含大量时序信息的html表。非常适合优化MarkLogic Server中的代码。

答案 1 :(得分:2)

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

尝试以下诊断功能。

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

这将返回查询结果和查询的一些诊断信息。在你的情况下,它就像这样..

(xdmp:http-post('http://www.somerestdomain.com',()), xdmp:query-meters())