我们正处于 fine-tuning 申请过程中,我正在查找方法调用之间的时滞 . 该方法可以是函数调用或休息过程 .
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指定为相同的值 .
我发现这个示例代码也有一些问题w.r.t到MarkLogic http://en.wikibooks.org/wiki/XQuery/Uptime_monitor
我们使用的是MarkLogic Xml数据库,上面提到的 Pseudo code 指的是MarkLogic API
有没有办法找出XQuery TimeOut?
2 回答
如果我没有弄错的话,请使用
xdmp:elapsed-time()
而不是current-time()
,4.2中引入的新功能 .正如斯科特在上面的评论中所解释的那样,
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中的代码非常有 Value .MarkLogic使用multiversion concurrency,基本上这意味着每个事务将时钟递增1个周期 . 由于$ x和$ y在同一个事务中,因此您将始终返回相同的时间戳 .
尝试以下诊断功能 .
这将返回查询结果和查询的一些诊断信息 . 在你的情况下,它会像这样..