Yes, that will work great. The profiler in Query Console is also very helpful.

Thanks, -m

On Feb 22, 2012, at 4:58 PM, Will Thompson wrote:

> Michah,
> 
> Ah, I think so. Then would subtracting a finished elapsed-time from a start 
> elapsed time be a reasonable way to calculate an individual function call's 
> time? For example:
> 
> declare function s:do-snippet(
>    $result as node(),
>    $ctsquery as schema-element(cts:query),
>    $options as element(search:transform-results)?
> ) as element(search:snippet)
> {
>  let $x := s:do-stuff($result//a)
>  let $y := s:do-more-stuff($result//b)
>  return
>      s:package-it-up($x,$y)
> };
> 
> declare function s:do-stuff(
>  $x as element(a)
> ) as xs:string*
> {
>  let $start := xdmp:elapsed-time()
>  return
>       (
>       *do work*,
>       xdmp:log(concat("do-stuff time: ",xdmp:elapsed-time() - $start))
>       )
> };
> 
> Best,
> 
> Will
> 
> -----Original Message-----
> From: general-boun...@developer.marklogic.com 
> [mailto:general-boun...@developer.marklogic.com] On Behalf Of Micah Dubinko
> Sent: Wednesday, February 22, 2012 4:43 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] Timing in snippet extension module
> 
> Hi Will,
> 
> xdmp:elapsed-time measures the overall elapsed time for the request, at the 
> instant it is called.
> 
> Inside Search API, at the start of processing the specific search we record 
> $t-minus-zero then subtract that from the elapsed-time at the end to produce 
> the total-time value. This is to avoid measuring the time taken by other 
> things happening in that request but outside of Search  API.
> 
> I don't know the details of your log statement from the listing below, but if 
> the first happened at 0.392 and the last at 0.704 then in that case the 
> elapsed is
> ( 0.704 - 0.392 = 0.312 seconds) well within the reported total-time value.
> 
> Does this make sense?
> 
> Thanks, -m
> 
> 
> 
> 
> On Feb 22, 2012, at 4:22 PM, Will Thompson wrote:
> 
>> xdmp:elapsed-time() is reporting some confusing numbers from my Search API 
>> snippet extension module. I have a function (actually several) that I would 
>> like to time so I can target the slower parts for optimization. I am logging 
>> the times, and they look like this:
>> 
>> 2012-02-22 15:45:11.629 Info: HTTP-server: snippet
>> 2012-02-22 15:45:11.639 Info: HTTP-server: func() time: PT0.392S
>> 2012-02-22 15:45:11.639 Info: HTTP-server: func() time: PT0.392S
>> 2012-02-22 15:45:11.640 Info: HTTP-server: func() time: PT0.393S
>> 2012-02-22 15:45:11.640 Info: HTTP-server: func() time: PT0.393S
>> 2012-02-22 15:45:11.641 Info: HTTP-server: func() time: PT0.394S
>> 2012-02-22 15:45:11.642 Info: HTTP-server: func() time: PT0.395S
>> 2012-02-22 15:45:11.655 Info: HTTP-server: snippet
>> 2012-02-22 15:45:11.659 Info: HTTP-server: func() time: PT0.412S
>> 2012-02-22 15:45:11.659 Info: HTTP-server: func() time: PT0.412S
>> 2012-02-22 15:45:11.668 Info: HTTP-server: snippet
>> 2012-02-22 15:45:11.672 Info: HTTP-server: func() time: PT0.425S
>> 2012-02-22 15:45:11.672 Info: HTTP-server: func() time: PT0.425S
>> 2012-02-22 15:45:11.673 Info: HTTP-server: func() time: PT0.426S
>> 2012-02-22 15:45:11.683 Info: HTTP-server: snippet
>> ...
>> 2012-02-22 15:45:11.942 Info: HTTP-server: func() time: PT0.695S
>> 2012-02-22 15:45:11.942 Info: HTTP-server: func() time: PT0.695S
>> 2012-02-22 15:45:11.942 Info: HTTP-server: func() time: PT0.695S
>> 2012-02-22 15:45:11.945 Info: HTTP-server: func() time: PT0.698S
>> 2012-02-22 15:45:11.946 Info: HTTP-server: func() time: PT0.699S
>> 2012-02-22 15:45:11.946 Info: HTTP-server: func() time: PT0.699S
>> 2012-02-22 15:45:11.947 Info: HTTP-server: func() time: PT0.7S
>> 2012-02-22 15:45:11.947 Info: HTTP-server: func() time: PT0.7S
>> 2012-02-22 15:45:11.947 Info: HTTP-server: func() time: PT0.7S
>> 2012-02-22 15:45:11.949 Info: HTTP-server: func() time: PT0.702S
>> 2012-02-22 15:45:11.950 Info: HTTP-server: func() time: PT0.703S
>> 2012-02-22 15:45:11.951 Info: HTTP-server: func() time: PT0.704S
>> 2012-02-22 15:45:11.951 Info: HTTP-server: func() time: PT0.704S
>> 
>> Execution time is increasing, and I assume this is related to concurrent 
>> execution of snippets. But I can't square this with the metrics I get back 
>> from the search call:
>> 
>> <search:metrics>
>> <search:query-resolution-time>PT0.012S</search:query-resolution-time>
>> <search:facet-resolution-time>PT0.011S</search:facet-resolution-time>
>> <search:snippet-resolution-time>PT0S</search:snippet-resolution-time>
>> <search:total-time>PT0.656S</search:total-time>
>> </search:metrics>
>> 
>> Total time is reported as less than the longest func() time 
>> (snippet-resolution-time returning 0 is a known bug). Also, func() is 
>> probably not even the most expensive operation in my snippet module, so it 
>> seems like I just can't trust these times at all. 
>> 
>> Any ideas?
>> 
>> Best,
>> 
>> Will
>> 
>> 
>> _______________________________________________
>> General mailing list
>> General@developer.marklogic.com
>> http://developer.marklogic.com/mailman/listinfo/general
> 
> _______________________________________________
> General mailing list
> General@developer.marklogic.com
> http://developer.marklogic.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> General@developer.marklogic.com
> http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to