首页 文章

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

提问于
浏览
3

我们正处于 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 回答

  • 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 .

  • 3

    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())
    

相关问题