我们正处于微调我们的应用程序的过程中,我正在查找方法调用之间的时间延迟。该方法可以是函数调用或休息过程。
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?
答案 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())