OK, so the profile tells us that we need to account for about 5.7 sec, most of
which is in the hof call which we suspect is the cts:search FLWOR.
Here's the interesting part of the query-trace output:
2013-03-11 12:25:51.863 Info: policyPortalUAT-http-12000:
/MarkLogic/appservices/utils/higher-order.xqy at 1:27: Search query contributed
2 constraints:
cts:and-query((cts:or-query((cts:and-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=", xs:int("1"), (), 1),
cts:or-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("620"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("732"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("966"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("967"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("971"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"group
Id"), "=", xs:int("972"), (), 1)))), ()),
cts:and-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=", xs:int("2"), (), 1),
cts:or-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("945"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("946"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("947"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("948"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("949"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("950"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("951"
), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("952"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("953"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("954"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("955"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("956"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("966"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("967"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("988"), (), 1),
cts:element-range-query(fn:QName("http://morgansta
nley.com/firmwidePolicy", "groupId"), "=", xs:int("989"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("990"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("991"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("992"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("994"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("995"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("996"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("997"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("998"), (),
1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("999"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1000"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1001"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1002"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1003"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1004"), (), 1)))), ()),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=", xs:int("0"), (), 1))), cts:directory-query("/policies/",
"infinity")), ())
2013-03-11 12:25:51.864 Info: policyPortalUAT-http-12000:
/MarkLogic/appservices/utils/higher-order.xqy at 1:27: Order by clause
contributed 1 range ordering constraint for $result: order by
cts:score($result) descending, xs:string(($result/descendant::_1:order)[1])
ascending, xs:date(($result/descendant::_1:normEffectiveDate)[1]) descending
2013-03-11 12:25:51.864 Info: policyPortalUAT-http-12000:
/MarkLogic/appservices/utils/higher-order.xqy at 1:27: Executing search.
2013-03-11 12:25:51.865 Info: policyPortalUAT-http-12000:
/MarkLogic/appservices/utils/higher-order.xqy at 1:27: Selected 2780 fragments
to filter.
2013-03-11 12:25:57.310 Info: policyPortalUAT-http-12000:
/MarkLogic/appservices/search/search-impl.xqy at 1849:4: Comparison contributed
int range value constraint: _1:accessType = xs:int("1")
Normally I would stop at the "Selected 2780 fragments" because I expect that to
be the end. But resolving the query only used 2-ms. The rest of the time was
used after that, but before the next log message. That log message looks like
facet or bucket code, which didn't show up in the profiler. So we will ignore
that.
Three things should happen inside the cts:search FLWOR: resolving the query,
ordering the results, and filtering the results. The "order by" clause looks a
bit strange here:
Order by clause contributed 1 range ordering constraint for $result: order by
cts:score($result) descending, xs:string(($result/descendant::_1:order)[1])
ascending, xs:date(($result/descendant::_1:normEffectiveDate)[1]) descending
Why order by score, then the other two keys? Does that make sense given your
search options?
Also it looks like only one of these used a range index. That could be the
performance problem. Or filtering could be taking a long time because of the
complex nature of the query: it might help to rewrite all those groupId terms
as multivalue query terms.
To look deeper into this, recreate the search-impl cts:search FLWOR and profile
it directly. I think it would look like this:
(for $result in cts:search(fn:collection(),
cts:and-query((cts:or-query((cts:and-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=", xs:int("1"), (), 1),
cts:or-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("620"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("732"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("966"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("967"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("971"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("972"), (), 1)))), ()),
cts:and-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=",
xs:int("2"), (), 1),
cts:or-query((cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("945"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("946"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("947"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("948"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("949"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("950"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("951"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("952"), (), 1), cts:element-range-query(fn
:QName("http://morganstanley.com/firmwidePolicy", "groupId"), "=",
xs:int("953"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("954"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("955"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("956"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("966"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("967"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("988"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("989"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"),
"=", xs:int("990"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("991"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("992"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("994"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("995"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("996"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("997"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("998"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("999"), (), 1), cts:element-range-query(fn:QName
("http://morganstanley.com/firmwidePolicy", "groupId"), "=", xs:int("1000"),
(), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1001"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1002"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1003"), (), 1),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"groupId"), "=", xs:int("1004"), (), 1)))), ()),
cts:element-range-query(fn:QName("http://morganstanley.com/firmwidePolicy",
"accessType"), "=", xs:int("0"), (), 1))), cts:directory-query("/policies/",
"infinity")), ())
order by order by cts:score($result) descending,
xs:string(($result/descendant::_1:order)[1]) ascending,
xs:date(($result/descendant::_1:normEffectiveDate)[1]) descending
return $result
)[1 to 20]
Adjust as needed: for example the pagination predicate might be different
depending on your search:search options. When you profile that you should see
details of the FLWOR execution, instead of the opaque search-impl xdmp:value
call. My guess is the top expression will have a count of 2780, matching the
number of fragments in the entire result set.
-- Mike
On 11 Mar 2013, at 09:28 , "Singh, Gurbeer" <[email protected]>
wrote:
> Hi Mike
>
> Sending you profile result & errlog after putting Trace on.
>
> I am unable to figure it out why it is taking so much time in
> "xdmp:value($expr/hof:lambda/@expr)"
>
> CQ query :
>
> xdmp:query-trace(true()),
> search:search("((AccessType:1 AND (GroupId:620 OR GroupId:732 OR GroupId:966
> OR GroupId:967 OR GroupId:971 OR GroupId:972 ) ) OR (AccessType:2 AND
> (GroupId:945 OR GroupId:946 OR GroupId:947 OR GroupId:948 OR GroupId:949 OR
> GroupId:950 OR GroupId:951 OR GroupId:952 OR GroupId:953 OR GroupId:954 OR
> GroupId:955 OR GroupId:956 OR GroupId:966 OR GroupId:967 OR GroupId:988 OR
> GroupId:989 OR GroupId:990 OR GroupId:991 OR GroupId:992 OR GroupId:994 OR
> GroupId:995 OR GroupId:996 OR GroupId:997 OR GroupId:998 OR GroupId:999 OR
> GroupId:1000 OR GroupId:1001 OR GroupId:1002 OR GroupId:1003 OR GroupId:1004)
> ) OR (AccessType:0))", $config:OPTIONS, 1)
>
>
>
>
> ~Gurbeer
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Michael Blakeley
> Sent: Friday, March 08, 2013 12:26 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] Performance tuning
>
> That isn't very much to go on, or very easy to read: a screenshot that shows
> the top 5-15 lines might be worth looking at.
>
> But since there is only one call taking 93% of shallow time, it almost has to
> be the cts:search() call for the results. So the next step is to query-trace
> that: http://docs.marklogic.com/xdmp:query-trace?q=query-trace
>
> Try something like this:
>
> import module namespace search = "http://marklogic.com/appservices/search"
> at "/MarkLogic/appservices/search/search.xqy";
>
> xdmp:query-trace(true()),
> (: bind $query and $options values :)
> let $query := ...
> let $options := ...
> return search:search($query, $options)
>
> The output will be in your ErrorLog.txt, logged at level "Info". The
> interesting lines start with one for 'Analyzing path' (and the line before it
> is useful too). The trace messages end with 'Executing' and 'Selected [...]
> fragments to filter'.
>
> Here's a trivial example with no results. With a complex query it would be
> longer.
>
> 2013-03-08 09:18:47.489 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12:
> xdmp:value(xs:untypedAtomic("(cts:search(fn:collection(),
> cts:word-query("foo", (&q..."))
> 2013-03-08 09:18:47.491 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Analyzing path for
> search: fn:collection()
> 2013-03-08 09:18:47.491 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Step 1 is searchable:
> fn:collection()
> 2013-03-08 09:18:47.491 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Path is fully
> searchable.
> 2013-03-08 09:18:47.491 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Gathering constraints.
> 2013-03-08 09:18:47.542 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Search query
> contributed 1 constraint: cts:word-query("foo", ("lang=en"), 1)
> 2013-03-08 09:18:47.542 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Executing search.
> 2013-03-08 09:18:47.551 Info: 8003-cq:
> /MarkLogic/appservices/utils/higher-order.xqy at 1:12: Selected 0 fragments
> to filter
>
> -- Mike
>
> On 8 Mar 2013, at 06:32 , "Singh, Gurbeer" <[email protected]>
> wrote:
>
>>
>> I got this result as higher time consuming
>>
>>
>>
>> MarkLogic/appservices/utils/higher-order.xqy:52:8
>> 1
>> 93
>>
>> 4496663
>> 93
>>
>> 4496712
>> xdmp:value($expr/hof:lambda/@expr)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Michael
>> Blakeley
>> Sent: Thursday, March 07, 2013 3:18 PM
>> To: MarkLogic Developer Discussion
>> Subject: Re: [MarkLogic Dev General] Performance tuning
>>
>> Start by constructing a representative slow in cq or qconsole, then profile
>> that query. Looking at the profiler output, where is it spending its time?
>>
>> -- Mike
>>
>> On 7 Mar 2013, at 11:40 , "Singh, Gurbeer" <[email protected]>
>> wrote:
>>
>>>
>>> We have a hit in search performance, especially if user belongs to
>>> different region.
>>>
>>> Here is the scenario
>>>
>>> We got XML with element <GroupId> & <AccessType > both are INT.
>>>
>>> <AccessType> will contains 0 or 1 (public/Private)
>>>
>>> <GroupId> will contain number.
>>>
>>> Now search logic is , if am a member of GroupId 1, get me all records
>>> ofGroupId 1 AND rest all GroupId with AccessType 0.
>>>
>>> This means Public/Private of GroupId 1 + rest all public records.
>>>
>>> Now if I have a user who belongs to 5-6 different GroupId,my query will
>>> become
>>>
>>> ((AccessType:1 AND (GroupId:620 OR GroupId:732 OR GroupId:966 OR
>>> GroupId:967 OR GroupId:971 OR GroupId:972 ) ) OR
>>>
>>> (AccessType:0))
>>>
>>> This is working ok with NA region but for EU and other region its very
>>> slow. If GroupId got increase for any user it's a timeout
>>>
>>> We have grammar define in config as
>>>
>>> <grammar>
>>> <starter strength="30" apply="grouping" delimiter=")">(</starter>
>>> <starter strength="40" apply="prefix"
>>> element="cts:not-query">NOT</starter>
>>> <starter strength="40" apply="prefix"
>>> element="cts:not-query">EXCEPT</starter>
>>> <joiner strength="10" apply="infix"
>>> element="cts:or-query"tokenize="word">OR</joiner>
>>> <joiner strength="20" apply="infix"
>>> element="cts:and-query"tokenize="word">AND</joiner>
>>> <quotation>"</quotation> (: " :)
>>> <joiner strength="50" apply="constraint">:</joiner>
>>> </grammar>
>>>
>>> groupId and accestype both are constraint
>>>
>>> <constraint name="AccessType">
>>> <range collation="http://marklogic.com/collation/" type="xs:int"
>>> facet="false">
>>> <facet-option>limit=10</facet-option>
>>> <element ns="http://ms.com/firmwidePolicy" name="accessType"/>
>>> </range>
>>> <annotation>
>>>
>>> <proj:front-pagexmlns:proj="http://marklogic.com/appservices/project">false</proj:front-page>
>>>
>>> <proj:side-barxmlns:proj="http://marklogic.com/appservices/project">true</proj:side-bar>
>>> </annotation>
>>> </constraint>
>>>
>>> <constraint name="GroupId">
>>> <range type="xs:int" facet="true">
>>> <facet-option>limit=10</facet-option>
>>> <element ns="http://ms.com/firmwidePolicy" name="groupId"/>
>>> </range>
>>> <annotation>
>>>
>>> <proj:front-pagexmlns:proj="http://marklogic.com/appservices/project">false</proj:front-page>
>>>
>>> <proj:side-barxmlns:proj="http://marklogic.com/appservices/project">true</proj:side-bar>
>>> </annotation>
>>> </constraint>
>>>
>>>
>>>
>>> ~Gurbeer
>>>
>>>
>>>
>>>
>>> NOTICE: Morgan Stanley is not acting as a municipal advisor and the
>>> opinions or views contained herein are not intended to be, and do not
>>> constitute, advice within the meaning of Section 975 of the Dodd-Frank Wall
>>> Street Reform and Consumer Protection Act. If you have received this
>>> communication in error, please destroy all electronic and paper copies and
>>> notify the sender immediately. Mistransmission is not intended to waive
>>> confidentiality or privilege. Morgan Stanley reserves the right, to the
>>> extent permitted under applicable law, to monitor electronic
>>> communications. This message is subject to terms available at the following
>>> link: http://www.morganstanley.com/disclaimers If you cannot access these
>>> links, please notify us by reply message and we will send the contents to
>>> you. By messaging with Morgan Stanley you consent to the foregoing.
>>>
>>>
>>>
>>> _______________________________________________
>>> General mailing list
>>> [email protected]
>>> http://developer.marklogic.com/mailman/listinfo/general
>>
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>>
>>
>>
>> NOTICE: Morgan Stanley is not acting as a municipal advisor and the opinions
>> or views contained herein are not intended to be, and do not constitute,
>> advice within the meaning of Section 975 of the Dodd-Frank Wall Street
>> Reform and Consumer Protection Act. If you have received this communication
>> in error, please destroy all electronic and paper copies and notify the
>> sender immediately. Mistransmission is not intended to waive confidentiality
>> or privilege. Morgan Stanley reserves the right, to the extent permitted
>> under applicable law, to monitor electronic communications. This message is
>> subject to terms available at the following link:
>> http://www.morganstanley.com/disclaimers If you cannot access these links,
>> please notify us by reply message and we will send the contents to you. By
>> messaging with Morgan Stanley you consent to the foregoing.
>>
>>
>>
>> _______________________________________________
>> General mailing list
>> [email protected]
>> http://developer.marklogic.com/mailman/listinfo/general
>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
>
>
> --------------------------------------------------------------------------------
>
> NOTICE: Morgan Stanley is not acting as a municipal advisor and the opinions
> or views contained herein are not intended to be, and do not constitute,
> advice within the meaning of Section 975 of the Dodd-Frank Wall Street Reform
> and Consumer Protection Act. If you have received this communication in
> error, please destroy all electronic and paper copies and notify the sender
> immediately. Mistransmission is not intended to waive confidentiality or
> privilege. Morgan Stanley reserves the right, to the extent permitted under
> applicable law, to monitor electronic communications. This message is subject
> to terms available at the following link:
> http://www.morganstanley.com/disclaimers. If you cannot access these links,
> please notify us by reply message and we will send the contents to you. By
> messaging with Morgan Stanley you consent to the
> foregoing.<Profileresult.xlsx><errLogs.txt>_______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general