3

現在、アプリケーションを微調整しており、メソッド呼び出し間のタイムラグを見つけています。メソッドは、関数呼び出しまたはレストプロセスにすることができます。

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を同じ値として割り当てることがわかります。

MarkLogichttp ://en.wikibooks.org/wiki/XQuery/Uptime_monitorにもいくつかの問題があるこのサンプルコードを見つけました

MarkLogic Xmlデータベースを使用しており、上記の擬似コードはMarkLogicAPIを参照しています

XQuery TimeOutを見つける方法はありますか?

4

2 に答える 2

3

間違っていなければ、4.2 で導入された新しい関数 のxdmp:elapsed-time()代わりに使用してください。current-time()

スコットと上記のコメントで説明されているように、current-time()は安定しており、1 回の実行で同じ値を返しxdmp:eval()ます。

これに加えて、クエリからタイミング情報を取得する一般的な方法があります。最も簡単な方法は、関連するコードの一部を CQ ( http://developer.marklogic.com/code/cq )にコピーしProfile、そこでボタンを押すことです。プロファイル ライブラリ ( http://developer.marklogic.com/pubs/5.0/apidocs/ProfileBuiltins.html )の関数を使用するフードの下。これらは、多くのタイミング情報を含む html テーブルを返します。MarkLogic サーバーでコードを最適化するために非常に価値があります。

于 2011-12-09T18:56:52.427 に答える
2

MarkLogic はマルチバージョン同時実行を使用します。これは基本的に、各トランザクションがクロックを 1 周期ずつインクリメントすることを意味します。$x と $y は同じトランザクションにあるため、常に同じタイムスタンプを返します。

以下の診断機能をお試しください。

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

これにより、クエリの結果と、クエリに関するいくつかの診断情報が返されます。あなたの場合、このようになります..

(xdmp:http-post('http://www.somerestdomain.com',()), xdmp:query-meters())
于 2011-03-08T19:44:46.273 に答える