MarkLogic Server में Profiler

लगभग किसी भी एप्लिकेशन को विकसित और समर्थन करते समय प्रोफाइलिंग एक बहुत महत्वपूर्ण पहलू है। यह डेटाबेस पर लागू नहीं होता है। विशेष रूप से बड़ी मात्रा में जानकारी के साथ, डेटा वेयरहाउस में प्रश्नों का प्रदर्शन बहुत महत्वपूर्ण है। MarkLogic Server में क्वेरी प्रदर्शन और उनके प्रोफाइलिंग के लिए, हम कह सकते हैं कि MarkLogic Server में उपयोग किए जाने वाले XQuery के बाद से ये मुद्दे सबसे महत्वपूर्ण हैं, जो आपको न केवल DB के लिए बहुत ही जटिल प्रश्न लिखने की अनुमति देता है, बल्कि काफी जटिल एप्लिकेशन भी।

मार्कलोगिक सर्वर में दस अंतर्निहित कार्यों में प्रस्तुत की गई बहुत अच्छी रूपरेखा है। वे सभी नामस्थान में स्थित हैं "http://marklogic.com/xdmp/profile" और उपसर्ग के साथ पहुंच रहे हैं "औसत : "

prof:eval( $xquery as xs:string, [$vars as item()*], [$options as node()?] ) as item()* 


यह फ़ंक्शन एक पाठ स्ट्रिंग के रूप में XQuery को दिया जाता है जिसका प्रदर्शन परीक्षण के लायक है।

 prof:eval( "1 + 1" ) 


प्रोफ के लिए वापसी मूल्य : eval अनुक्रम है (<XML के साथ रिपोर्ट>, <XQuery निष्पादन परिणाम>)। रिपोर्ट में XQuery निष्पादन के बारे में काफी विस्तृत जानकारी है।

उदाहरण

 <prof:metadata> <prof:overall-elapsed>PT0S</prof:overall-elapsed> <prof:created>2013-09-13T00:00:00.000+04:00</prof:created> <prof:server-version>6.0-3</prof:server-version> </prof:metadata> <prof:histogram> <prof:expression> <prof:expr-id>13367197075475374717</prof:expr-id> <prof:expr-source>1 + 1</prof:expr-source> <prof:uri/> <prof:line>1</prof:line> <prof:column>33</prof:column> <prof:count>1</prof:count> <prof:shallow-time>PT0S</prof:shallow-time> <prof:deep-time>PT0S</prof:deep-time> </prof:expression> </prof:histogram> </prof:report>, 2 


यह ध्यान देने योग्य है कि इस तरह से पारित किया गया XQuery उस संदर्भ से संबंधित किसी भी तरह से नहीं है जिसमें प्रोफ: एवल को निष्पादित किया जाता है। XQuery डीबग करने के लिए पैरामीटर पास करने के लिए, आप $ var पैरामीटर का उपयोग कर सकते हैं, जो कि फॉर्म (QName, <value>) में चर का एक क्रम है। उदाहरण

 prof:eval( "declare variable $a external; $a + 1", (fn:QName("", "a"), 1) ) 


या तो

 prof:eval( "declare variable $a external; declare variable $b external; $a + $b", (fn:QName("", "a"), 1, fn:QName("", "b"), 1) ) 


यदि XQuery निष्पादन के दौरान कोई त्रुटि होती है, तो प्रोफ: eval एक PROF-PROFILEALLOW अपवाद फेंकता है

अगले फ़ंक्शन के बारे में, हम कह सकते हैं कि यह prof: eval के समान है , एकमात्र अपवाद है कि यह XQuery को टेक्स्ट स्ट्रिंग के रूप में नहीं, बल्कि XQuery मॉड्यूल के लिए पथ प्राप्त करता है।

 prof:invoke( $path as xs:string, [$vars as item()*], [$options as node()?] ) as item()* 


XQuery मॉड्यूल को लाइब्रेरी नहीं होना चाहिए, यह "मुख्य" निष्पादन योग्य मॉड्यूल होना चाहिए। मॉड्यूल का पथ एप्लिकेशन सर्वर की जड़ के सापेक्ष हल होता है। अन्यथा, प्रो: आह्वान पूरी तरह से प्रो: ईवल के अनुरूप है।

MarkLogic Server आपको प्रोफ में दिए गए XQuery के लिए न केवल प्रोफाइल बनाने की अनुमति देता है : eval और prof: इन्वोक फ़ंक्शन, बल्कि सीधे प्रोग्राम मॉड्यूल में स्थित निर्देशों के लिए भी। इसके अलावा, प्रोफाइलिंग एक विशिष्ट प्रोग्राम कोड से जुड़ी नहीं है, लेकिन सर्वर द्वारा संसाधित अनुरोध के लिए है। यह आपको वर्तमान अनुरोध में न केवल कोड को डिबग करने की अनुमति देता है, बल्कि इसके आईडी को जानने के किसी भी अनुरोध का विश्लेषण करता है और आवेदन कोड के साथ हस्तक्षेप नहीं करता है, जो उत्पादन वातावरण में आवेदन का विश्लेषण करने के मामले में बहुत उपयोगी हो सकता है।

निष्पादन के बारे में जानकारी एकत्र करना शुरू करने के लिए, आपको फ़ंक्शन को कॉल करने की आवश्यकता है

 prof:enable( $request-id as xs:unsignedLong ) as empty-sequence() 


जहाँ $ request-id अनुरोध पहचानकर्ता है जिसके लिए प्रोफ़ाइल शुरू करना है।
आप xdmp: request () फ़ंक्शन का उपयोग करके वर्तमान अनुरोध की आईडी प्राप्त कर सकते हैं।
फ़ंक्शन का उपयोग करने के लिए आपको जानकारी के संग्रह को रोकने के लिए

 prof:disable( $request-id as xs:unsignedLong ) as empty-sequence() 


पूर्वगामी के रूप में, आप कॉल के बीच संसाधित किसी भी कोड को प्रोफ के लिए सक्षम कर सकते हैं : सक्षम करें और प्रो: अक्षम करें यदि वर्तमान अनुरोध के लिए प्रोफाइलिंग की जाती है, या उस समय के बीच जब ये फ़ंक्शन कॉल किए गए थे, तो वर्तमान अनुरोध का विश्लेषण नहीं किया जाता है।

प्रोफाइलर का उपयोग करने की कोशिश करते समय, निम्न उपयोगकर्ता अधिकारों की जाँच की जाती है
"Http://marklogic.com/xdmp/privileges/profile-my-requests" - इन अनुरोधों को पूरा करने के लिए
"Http://marklogic.com/xdmp/privileges/profile-any-requests" - इन अनुरोधों को पूरा करने के लिए
बेशक, एक छोटा अपवाद है - वर्तमान अनुरोध (जिसके लिए प्रोफाइलिंग फ़ंक्शंस हैं) के लिए विशेष भूत की आवश्यकता नहीं है, और "प्रोफ़ाइल-मेरे-अनुरोधों" को वर्तमान उपयोगकर्ता के सभी अनुरोधों (वर्तमान को छोड़कर) के लिए प्रोफ़ाइल का अधिकार देता है।
यह जांचने के लिए कि क्या प्रोफाइल किसी विशेष अनुरोध के लिए उपलब्ध है, आप फ़ंक्शन का उपयोग कर सकते हैं

 prof:allowed( $request-id as xs:unsignedLong ) as xs:boolean 


अनुरोध के निष्पादन के बारे में एकत्रित जानकारी प्राप्त करने के लिए, आपको फ़ंक्शन का उपयोग करना चाहिए

 prof:report( $request-id as xs:unsignedLong ) as element(prof:report)? 


प्रो के विपरीत : eval , जो एक रिपोर्ट लौटाता है और XQuery का परिणाम है, प्रोफ: रिपोर्ट फ़ंक्शन केवल एक रिपोर्ट देता है।

प्रो उदाहरण : रिपोर्ट

 let $e as empty-sequence() := prof:enable( xdmp:request() ) let $r as xs:string := fn:string( 1 + 2 ) return prof:report( xdmp:request() ) 


कभी-कभी संचित जानकारी को हटाने और फिर से रिपोर्टिंग शुरू करने की आवश्यकता होती है, इसके लिए फ़ंक्शन का उपयोग किया जाता है

 prof:reset( $request-id as xs:unsignedLong ) as empty-sequence() 


निम्न फ़ंक्शन प्रोफ के समान है : eval फ़ंक्शन, लेकिन इसके विपरीत, प्रो: मूल्य निर्दिष्ट XQuery निष्पादित होने पर संदर्भ को इनहेरिट करता है।

 prof:value( $expr as xs:string ) as item()* 


प्रोफ़र द्वारा इनहेरिटिंग संदर्भ : मान फ़ंक्शन आपको इस तरह का कोड लिखने की अनुमति देता है

 let $a := 1 let $b := 2 return prof:value('$a + $b') 


दो और दिलचस्प विशेषताएं हैं।

 prof:xslt-eval( $stylesheet as element(), $input as node()?, [$params as map:map?], [$options as node()?] ) as item()* 


 prof:xslt-invoke( $path as xs:string, $input as node()?, [$params as map:map?], [$options as node()?] ) as item()* 


जहां $ इनपुट एक XSLT प्रोसेसर में संसाधित XML दस्तावेज है।
इन फ़ंक्शंस के नाम से, यह स्पष्ट है कि वे प्रो: ईवैल और प्रोफ: इनवोक फ़ंक्शंस के समान हैं, लेकिन एक्सएसएलटी को प्रोफाइल करने के लिए उपयोग किया जाता है, जिसके प्रोसेसर को मार्कलॉजिक सर्वर डेवलपर्स ने इतनी सावधानी से अपने उत्पाद में बनाया है।

MarkLogi सर्वर प्रदर्शन विश्लेषण के लिए शक्तिशाली उपकरण प्रदान करता है। इस तंत्र के साथ, आप विभिन्न प्रकार के कार्यों के लिए जटिल प्रोफाइल बना सकते हैं। इसी समय, MarkLogi सर्वर में एकीकृत कंसोल में एक ग्राफिकल प्रोफाइलर है, जो छोटे कार्यों के लिए और विकास प्रक्रिया में विश्लेषण प्रक्रिया को आसान और अधिक सुविधाजनक बनाता है।

Source: https://habr.com/ru/post/In193674/


All Articles