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: [email protected]
> [mailto:[email protected]] 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
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general