我需要清楚地解释为什么XDMP-EXTIME
在Marklogic中发生。在我的情况下,它发生在搜索(读取操作)期间。在异常消息中,正在打印代码中的一行:
XDMP-EXTIME:wsssearch:options($ request,$ req-config) - 超出时间限制
这让我觉得执行不会超出那条线。但它似乎是一个非常无害的代码行,它不会从数据库中获取任何数据,只是设置某些搜索选项。我怎样才能确定代码的哪一部分导致了这个问题?我听说增加任务服务器的最大时间限制可以解决这些问题,但这不是我的选择。请告诉我这些问题是如何解决的。我向你展示代码库是非常困难的。希望能听到你们的帮助。
答案 0 :(得分:1)
你可以尝试分析代码,看看具体花了多长时间。这可能需要临时增加会话时间限制以防止在分析时发生超时。请注意,除非通过xdmp:spawn
或xdmp:spawn-fucntion
在Task Server上执行此操作,否则您需要增加托管脚本的App Server上的值。
如果您的代码在模块中,最简单的方法是使用“配置文件”选项卡调用从查询控制台超时的函数。或者,您可以使用prof:enable(xdmp:request())
开始函数,然后将prof:report(xdmp:request())
的内容输出到文件系统上的文件,或者将其插入数据库中的某个位置。
答案 1 :(得分:1)
由于懒惰评估,错误消息有时可能会让您误入歧途。执行实际上可能比错误消息似乎表明的更进一步。可能是一行,可能是几行。查找返回值的使用位置。
分析有时可以帮助更清楚地了解花费大部分时间的位置,但是懒惰的评估也可以在这里抛出一些东西。
消息的底线含义非常简单:代码执行时间过长。使用选项的实际搜索是最有可能出错的地方。
如果你正在使用cts:搜索或搜索:在封面下搜索,那么通常应该表现良好。当您最终返回许多结果时,搜索通常会变慢,例如不要分页。搜索:默认情况下搜索会执行此操作。
如果您在更新模式下运行搜索,搜索也会变慢。您可能最终让MarkLogic尝试应用许多(不必要的)读锁定。将以下声明放在搜索端点代码中,或者执行搜索的xquery主模块:
declare option xdmp:update "false";
HTH!