एसक्यूएल प्रोफाइलर समस्या हल करता है।

SQL सर्वर 2005 प्रोफाइलर, एप्लिकेशन क्वेरी ट्रैकिंग, ट्रेस पैटर्न, क्वेरी सूचना ग्रुपिंग

उपयोगकर्ता गतिविधि की निगरानी के लिए सबसे उपयोगी उपकरणों में से एक है प्रोफाइलर (प्रोफाइलर) इस टूल का उपयोग करके, आप यह पता लगा सकते हैं कि SQL सर्वर वर्तमान में कौन से कमांड निष्पादित कर रहा है। एक प्रोफाइलर का उपयोग करने की आवश्यकता बहुत बार उत्पन्न होती है। यहां कुछ मानक स्थितियां हैं जहां इसके बिना करना बहुत मुश्किल हो सकता है:

q आप एप्लिकेशन के संचालन का विश्लेषण करना चाहते हैं और देखना चाहते हैं कि यह सर्वर पर कौन से आदेश निष्पादित करता है। यह जानकारी काम आ सकती है:

· यह समझने के लिए कि कुछ ऑपरेशन करते समय यह एप्लिकेशन डेटाबेस में किन तालिकाओं के साथ काम करता है। बहुत बार एक उद्यम में एक ऐसे रूप में रिपोर्ट बनाने की आवश्यकता होती है जो एप्लिकेशन द्वारा प्रदान नहीं की जाती है, और डेवलपर्स शायद ही कभी डेटाबेस की संरचना के बारे में विस्तृत जानकारी प्रदान करते हैं;

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

यह समझने के लिए कि सर्वर पर एप्लिकेशन से कौन सा Transact -SQL कमांड निष्पादित करते समय त्रुटि होती है;

q लंबी अवधि में उपयोगकर्ता गतिविधि के बारे में जानकारी एकत्र करने के लिए (उदाहरण के लिए, आप कार्य दिवस के दौरान एक निश्चित एप्लिकेशन द्वारा सर्वर को भेजे गए सभी अनुरोध एकत्र कर सकते हैं)। एकत्रित जानकारी को तब मैन्युअल रूप से विश्लेषण किया जा सकता है या स्वचालित विश्लेषण के लिए डेटाबेस ट्यूनिंग सलाहकार को पास किया जा सकता है;

q वास्तविक समय में सर्वर के प्रदर्शन की निगरानी करने के लिए। उदाहरण के लिए, यदि सर्वर अचानक धीमा हो जाता है, तो आप प्रोफाइलर विंडो में देख सकते हैं कि वर्तमान में इस पर कौन से कमांड निष्पादित किए जा रहे हैं।

SQL सर्वर 2005 प्रोफाइलर के लिए बहुत सी नई चीजें पेश करता है:

क्ष एकीकरण सेवा इवेंट प्रोफाइलिंग पेश की गई थी। अब आप नए डीटीएस पैकेज की प्रगति को ट्रैक करने के लिए प्रोफाइलर का उपयोग कर सकते हैं;

q अब कमांड के निष्पादन के बारे में जानकारी लिखते समय सिस्टम मॉनिटर से काउंटरों की रीडिंग रिकॉर्ड करना संभव है;

q कई नए ईवेंट और सूचना स्रोत प्रोफाइलर में जोड़े गए हैं जिन्हें ट्रेस फ़ाइल में लिखे जाने के लिए चुना जा सकता है। ट्रेस फ़ाइल में क्या लिखना है इसकी परिभाषा अब XML स्वरूप में सहेजी जा सकती है;

q अब आप XML स्वरूप में ट्रेस परिणामों को सहेज सकते हैं (ANSI, OEM, UNICODE स्वरूपों में लिखने की क्षमता भी सहेजी जाती है);

क्ष यहां तक ​​कि प्रोफाइलर द्वारा पकड़े गए ट्रांजैक्ट-एसक्यूएल कमांड की निष्पादन योजनाओं को एक्सएमएल प्रारूप में सहेजा जा सकता है। इन योजनाओं को आगे के विश्लेषण के लिए SQL सर्वर प्रबंधन स्टूडियो में खोला जा सकता है;

q अब सीधे प्रोफाइलर विंडो में ईवेंट को समूहीकृत करना संभव है। उदाहरण के लिए, ग्रुपिंग का उपयोग करके, आप बहुत आसानी से गणना कर सकते हैं कि दिन के दौरान सर्वर पर किसी विशेष Transact -SQL कमांड को कितनी बार निष्पादित किया गया है।

प्रोफाइलर के साथ काम करना बहुत आसान लगता है। इस एप्लिकेशन को मेनू से लॉन्च किया जा सकता है शुरू| कार्यक्रमों| माइक्रोसॉफ्ट एसक्यूएल सर्वर 2005 | प्रदर्शन उपकरण | SQL सर्वर प्रोफाइलर ... आरंभ करने के लिए, मेनू में खुलने वाली प्रोफाइलर विंडो में फ़ाइल(फ़ाइल) आपको चयन करने की आवश्यकता है नयानिशान(नया ट्रेस) और SQL सर्वर 2005 सर्वर से कनेक्ट करें जिसकी आप निगरानी करेंगे। ट्रेसिंग एक सत्र को संदर्भित करता है जो SQL सर्वर 2005 के संचालन के बारे में जानकारी एकत्र करता है। हालाँकि, इससे पहले कि आप जानकारी एकत्र करना शुरू करें, आपको इस सत्र के मापदंडों को कॉन्फ़िगर करने की आवश्यकता है। यह सेटिंग विंडो में की जाती है निशानगुण(ट्रेस गुण), जो ट्रेसिंग सत्र शुरू करने से पहले स्वचालित रूप से खुलता है (चित्र 11.1)।

चावल। 11.1.ट्रेस सत्र पैरामीटर सेट करना

टैब में आम(सामान्य) सूचीबद्ध उपयोगटेम्पलेट(टेम्पलेट का प्रयोग करें) आप अपने सत्र में जानकारी एकत्र करने के लिए सबसे उपयुक्त टेम्पलेट चुन सकते हैं। सिद्धांत रूप में, आप टेम्प्लेट सेटिंग्स को अनदेखा कर सकते हैं, लेकिन जानकारी एकत्र करने के लिए मापदंडों को मैन्युअल रूप से परिभाषित कर सकते हैं (आसन्न टैब का उपयोग करके आयोजनचयन(घटना चयन))। हालांकि, सही टेम्प्लेट निर्दिष्ट करने से समय की बचत हो सकती है और गलतियों से बचा जा सकता है। इसलिए, हम टेम्प्लेट पर अधिक विस्तार से ध्यान देंगे।

टेम्प्लेट एक्सटेंशन के साथ एक विशेष फ़ाइल में सहेजा जाता है टीडीएफट्रेस सत्र सेटिंग्स। टेम्प्लेट के साथ काम करना (नए जोड़ना, मौजूदा को बदलना, रिपोर्ट को अन्य निर्देशिकाओं में आयात और निर्यात करना) मेनू का उपयोग करके किया जाता है फ़ाइल| टेम्पलेट्स(फाइल | टेम्प्लेट) SQL सर्वर प्रोफाइलर में। प्रारंभ में, आपके पास अपने निपटान में आठ टेम्पलेट हैं:

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

क्यू सपा_गिनता- निष्पादन के लिए शुरू की गई संग्रहीत प्रक्रियाओं और कार्यों के बारे में जानकारी एकत्र की जाती है। इस मामले में, प्रोफाइलर विंडो में जानकारी संग्रहीत प्रक्रियाओं के नाम से (प्रोफाइलर की शब्दावली में - समूहीकृत) सॉर्ट की जाती है;

क्यू टीएसक्यूएल- सर्वर पर निष्पादन के लिए लॉन्च किए गए सभी ट्रांजैक्ट-एसक्यूएल कमांड के बारे में जानकारी एकत्र की जाती है। कमांड कोड के अलावा, उपयोगकर्ता प्रक्रियाओं के पहचानकर्ताओं और प्रारंभ समय के बारे में जानकारी भी दर्ज की जाती है। आम तौर पर इस टेम्पलेट का उपयोग किसी एप्लिकेशन द्वारा सर्वर को भेजे गए आदेशों की निगरानी के लिए किया जाता है;

क्यू टीएसक्यूएल _अवधि- लगभग पिछले टेम्पलेट के समान, लेकिन उस समय के बारे में जानकारी रिकॉर्ड करने के बजाय जब ट्रांजैक्ट -एसक्यूएल कमांड चलाया गया था, इसे निष्पादित करने में लगने वाला समय रिकॉर्ड किया गया है। आमतौर पर इस टेम्पलेट का उपयोग सर्वर के प्रदर्शन को मैन्युअल रूप से मॉनिटर करने के लिए किया जाता है;

क्यू टीएसक्यूएल _समूहीकृत- Transact -SQL कमांड कोड और इसके लॉन्च के समय के बारे में जानकारी के अलावा, एप्लिकेशन नाम, ऑपरेटिंग सिस्टम में उपयोगकर्ता खाता और कनेक्ट करने के लिए उपयोग किए जाने वाले उपयोगकर्ता नाम के बारे में जानकारी दर्ज की जाती है। इस मामले में, रिकॉर्ड्स को लॉगिन द्वारा समूहीकृत किया जाता है। आमतौर पर इस पैटर्न का उपयोग उन स्थितियों में किया जाता है जहां आप किसी विशिष्ट एप्लिकेशन की गतिविधि को ट्रैक करना चाहते हैं;

क्यू टीएसक्यूएल _फिर से खेलना- निष्पादित Transact -SQL कमांड के बारे में सबसे विस्तृत जानकारी दर्ज की जाएगी। फिर इस जानकारी का उपयोग सर्वर पर लोड को अधिकतम सटीकता के साथ पुन: उत्पन्न करने के लिए किया जा सकता है। आमतौर पर, इस टेम्पलेट का उपयोग कमांड के एक सेट को लिखने के लिए किया जाता है जिसका उपयोग प्रदर्शन के दृष्टिकोण से विभिन्न सर्वर सेटिंग्स का परीक्षण करने के लिए किया जाएगा;

क्यू टीएसक्यूएल _एस.पी.- संपूर्ण संग्रहीत प्रक्रिया (घटना) की शुरुआत के बारे में जानकारी दर्ज करने के अलावा एसपी: शुरू), यह ट्रेस विकल्प इस संग्रहीत कार्यविधि में प्रत्येक कमांड के निष्पादन के बारे में जानकारी भी रिकॉर्ड करता है (ईवेंट एसपी: StmtStarting) यह पैटर्न आमतौर पर जटिल संग्रहीत कार्यविधियों के संचालन की निगरानी के लिए उपयोग किया जाता है;

क्यू ट्यूनिंग- यह टेम्प्लेट डेटाबेस ट्यूनिंग सलाहकार के हस्तांतरण के लिए सबसे उपयुक्त जानकारी रिकॉर्ड करने के लिए डिज़ाइन किया गया है। इस स्वचालित विश्लेषण और प्रदर्शन अनुकूलन उपकरण के साथ कैसे काम करें, इस पर चर्चा की जाएगी संप्रदाय 11.5.5.

जैसा कि पहले ही उल्लेख किया गया है, केवल तैयार किए गए टेम्प्लेट के एक सेट तक सीमित होना बिल्कुल भी आवश्यक नहीं है। आप टैब पर कॉन्फ़िगर करके अपने स्वयं के ट्रेस सत्र पैरामीटर का उपयोग कर सकते हैं आयोजनचयन... इस टैब की तालिका में, आपको आवश्यक घटनाओं (पंक्तियों में) और उनके लिए दर्ज की जाने वाली जानकारी (कॉलम में) का चयन करना होगा। ध्यान दें कि उपलब्ध पंक्तियों और स्तंभों का केवल एक छोटा सा हिस्सा डिफ़ॉल्ट रूप से दिखाई देता है। सभी पंक्तियों और स्तंभों के प्रदर्शन को सक्षम करने के लिए, आपको चेकबॉक्स का चयन करना होगा प्रदर्शनसभीआयोजन(सभी ईवेंट दिखाएं) और प्रदर्शनसभीकॉलम(सभी कॉलम दिखाएं)।

अक्सर ऐसा होता है कि आपको केवल एक विशिष्ट डेटाबेस, या एक विशिष्ट एप्लिकेशन, या एक विशिष्ट उपयोगकर्ता में किए गए कार्यों को ट्रैक करने की आवश्यकता होती है, या एक ही समय में इन सभी शर्तों का चयन करना होता है। जानकारी एकत्र करने के लिए फिल्टर बटन पर क्लिक करके कॉन्फ़िगर किया जा सकता है स्तंभफिल्टर(कॉलम फिल्टर) एक टैब पर आयोजनचयन... प्रत्येक कॉलम के लिए, आप केवल कुछ निश्चित मानों की रिकॉर्डिंग को कॉन्फ़िगर कर सकते हैं ( पसंद) या कुछ मूल्यों की रिकॉर्डिंग को प्रतिबंधित करना ( उसके जैसा नहीं) डिफ़ॉल्ट रूप से, एक एकल फ़िल्टर कॉन्फ़िगर किया गया है। उसके जैसा नहींकॉलम के लिए आवेदन का नाम... यह सभी SQL सर्वर प्रोफाइलर घटनाओं को अनदेखा करने का कारण बनता है, यानी ट्रेस जानकारी एकत्र करने की प्रक्रिया से संबंधित सभी घटनाएं। इस फ़िल्टर को न हटाना ही बेहतर है, क्योंकि अन्यथा जानकारी की अंतहीन रिकॉर्डिंग के साथ सकारात्मक प्रतिक्रिया हो सकती है।

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

आपके द्वारा वांछित टेम्पलेट का चयन करने या लॉगिंग के लिए ईवेंट के अपने स्वयं के सेट को कॉन्फ़िगर करने के बाद, आपको बस टैब पर वापस जाने की आवश्यकता है आमऔर ट्रेस सत्र के लिए कुछ अतिरिक्त पैरामीटर कॉन्फ़िगर करें।

ट्रेस जानकारी को किसी फ़ाइल में लॉग किया जा सकता है। इस फ़ाइल का उपयोग विभिन्न स्थितियों में किया जा सकता है:

q डेटाबेस ट्यूनिंग सलाहकार को सूचना के स्रोत के रूप में पारित किया जा सकता है;

q को सभी रिकॉर्ड किए गए आदेशों को दोहराकर प्रोफाइलर में बार-बार "खेला" जा सकता है, उदाहरण के लिए, विभिन्न सर्वर सेटिंग्स के तहत प्रदर्शन का मूल्यांकन करने के लिए;

क्यू डेवलपर्स को आवेदन के लिए उनके दावों के समर्थन में प्रस्तुत किया जा सकता है।

आइए कुछ बिंदुओं पर ध्यान दें जो किसी फ़ाइल में ट्रेस सत्र को लॉग करने से संबंधित हैं:

q 5 एमबी का डिफ़ॉल्ट फ़ाइल आकार बहुत छोटा है। उत्पादन सर्वर की रूपरेखा तैयार करते समय, यह आकार मिनटों में टाइप किया जाता है। सच है, डिफ़ॉल्ट रूप से चेकबॉक्स चेक किया गया है सक्षमफ़ाइलरोल ओवर(फाइल बदलने में सक्षम करें), यानी एक फाइल भरने के बाद दूसरी फाइल अपने आप बन जाएगी, जिसका नाम नंबर 1, फिर 2, आदि के साथ जोड़ा जाएगा, लेकिन इसके साथ काम करना हमेशा सुविधाजनक नहीं होता है बड़ी संख्या में फाइलें। यदि आप डेटाबेस ट्यूनिंग एडवाइज़र ट्रांसमिशन के लिए जानकारी एकत्र कर रहे हैं, तो फ़ाइल आकार सीमा को 1 जीबी पर सेट करना बेहतर है (पैरामीटर का उपयोग करके) सेटज्यादा से ज्यादाफ़ाइलआकार(अधिकतम फ़ाइल आकार अनुकूलित करें) टैब आम) किसी फ़ाइल की ट्रेस रिकॉर्डिंग अक्सर व्यवस्थापक के कार्य केंद्र से की जाती है, इसलिए डिस्क स्थान की आवश्यकता वर्कस्टेशन पर होगी न कि सर्वर पर;

क्यू पैरामीटर सर्वरप्रक्रियाओंनिशानआंकड़े(सर्वर प्रोसेस ट्रेस डेटा) का उपयोग ट्रेस जानकारी को रिकॉर्ड करने की विश्वसनीयता बढ़ाने के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, SQL सर्वर प्रोफाइलर उस कंप्यूटर पर ट्रेस डेटा प्रोसेसिंग को संभालता है जिस पर वह चल रहा है (जरूरी नहीं कि सर्वर पर)। यदि आप इस चेक बॉक्स का चयन करते हैं, तो सर्वर ट्रेस जानकारी के संसाधन को हैंडल करेगा। यह सुनिश्चित करता है कि सभी ट्रेस जानकारी एकत्र की जाएगी (यदि पीक सर्वर लोड के समय चेकबॉक्स को अनचेक किया जाता है, तो कुछ जानकारी को छोड़ दिया जा सकता है), लेकिन सर्वर पर लोड को बढ़ा देगा।

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

टैब पर अंतिम पैरामीटर आम- सक्षमनिशानविरामसमय(ट्रेस स्टॉप टाइम शामिल करें)। आप उस समय को निर्दिष्ट कर सकते हैं जब ट्रेसिंग स्वचालित रूप से अक्षम हो जाएगी। यह आमतौर पर किसी भी सेवा संचालन को शुरू करने से पहले ट्रेसिंग को बंद करने के लिए समझ में आता है, जिसमें आप लॉगिंग बिंदु (बैकअप, बल्क डेटा लोडिंग, OLAP क्यूब्स को संसाधित करना, आदि) से रुचि नहीं रखते हैं।

सभी ट्रेसिंग मापदंडों को कॉन्फ़िगर करने के बाद, आप बटन पर क्लिक कर सकते हैं दौड़ना(भागो) टैब आमऔर अनुरेखण प्रारंभ करें (चित्र 11.2)।

चावल। 11.2.ट्रेस सत्र के दौरान जानकारी देखना

ट्रेस सूचना दर्शक में काम काफी स्पष्ट है: ऊपरी भाग सर्वर पर होने वाली घटनाओं को दिखाता है, और निचला भाग उनके लिए विस्तृत जानकारी प्रदान करता है (उदाहरण के लिए, SQL कमांड का कोड)। आइए इस विंडो में उपलब्ध कुछ संभावनाओं पर ध्यान दें:

क्यू अगर टैब व्यवस्थितकॉलमटेम्पलेट के गुणों में आपने समूहीकृत किए जाने वाले स्तंभों का चयन किया है, फिर आप इन स्तंभों के आधार पर व्यूअर में रिकॉर्ड को समूहीकृत कर सकते हैं. इस उद्देश्य के लिए मेनू में राय(देखें) आदेश प्रदान किया गया समूहीकृतराय(समूहीकृत दृश्य);

क्ष यदि सूची में टेम्पलेट के गुणों में एक ही टैब पर है समूहकेवल एक कॉलम रखा गया है, तो आप और भी सुविधाजनक प्रदर्शन मोड का उपयोग कर सकते हैं एकत्रित कियाराय(अंजीर.11.3)। यह मोड कमांड का उपयोग करके सक्षम किया गया है एकत्रित कियारायएक ही मेनू से रायऔर आपको अपनी पसंद के कॉलम से मानों को ट्री नोड्स में बदलने की अनुमति देता है जिसे आप संक्षिप्त और विस्तारित कर सकते हैं। इसके अलावा, इनमें से प्रत्येक नोड के लिए घटनाओं की संख्या की स्वचालित रूप से गणना की जाती है।

चावल। 11.3.प्रदर्शन प्रणाली एकत्रित कियाराय

q प्रोफाइलर में, आप न केवल उन घटनाओं को प्रदर्शित कर सकते हैं जो अभी पकड़ी गई हैं, बल्कि सहेजी गई फ़ाइलें और ट्रेस टेबल भी प्रदर्शित कर सकते हैं। वैकल्पिक रूप से, आप Transact -SQL कमांड के साथ नियमित SQL सर्वर स्क्रिप्ट खोल सकते हैं। इन फ़ाइलों या तालिकाओं की जानकारी का उपयोग लॉग किए गए कार्यों को दोहराने के लिए किया जा सकता है। मेनू आदेश इस उद्देश्य के लिए अभिप्रेत हैं। फिर से खेलना(दोहराना);

q SQL सर्वर 2005 Profiler प्रदर्शन मॉनिटर में प्रदर्शन काउंटर के साथ ट्रेस जानकारी को जोड़ने के लिए एक नई सुविधा का परिचय देता है। इस अवसर का लाभ उठाने के लिए, आपको चाहिए:

ट्रेस सत्र को परिभाषित करें जिसके दौरान कॉलम के लिए जानकारी दर्ज की जानी चाहिए समय शुरूतथा अंतिम समय;

किसी फ़ाइल या तालिका में सूचना रिकॉर्डिंग के साथ ट्रेस सत्र प्रारंभ करें। साथ ही प्रदर्शन मॉनिटर मीटर रीडिंग को एक फ़ाइल में एकत्रित करें;

प्रोफाइलर में ट्रेस फ़ाइल से एकत्रित जानकारी खोलें, और फिर कमांड का उपयोग करें आयातप्रदर्शनआंकड़े(आयात प्रदर्शन डेटा) मेनू से फ़ाइल.

SQL सर्वर 2005 प्रोफाइलर के लिए प्लेसहोल्डर प्रदान करता है। ये ट्रेस संग्रहीत कार्यविधियाँ हैं। उनकी कार्यक्षमता लगभग प्रोफाइलर के समान है। उदाहरण के लिए, आप ईवेंट को ट्रेस करने और उन्हें टेक्स्ट फ़ाइल में लिखने के लिए भी चुन सकते हैं। मुख्य अंतर यह है कि सभी सेटिंग्स ट्रांजैक्ट -एसक्यूएल कोड से करनी होंगी।

ट्रेस संग्रहीत कार्यविधियाँ एक प्रोफाइलर की तुलना में काम करने के लिए अधिक कठिन और कम सुविधाजनक होती हैं, और वे अतिरिक्त सुविधाएँ प्रदान नहीं करती हैं। इसलिए, हम उन पर विस्तार से विचार नहीं करेंगे। संक्षिप्त विवरण के साथ ऐसी संग्रहीत प्रक्रियाओं की एक सूची यहां दी गई है:

क्यू sp_trace_create- आपको ट्रेसिंग सत्र के मापदंडों को कॉन्फ़िगर करने की अनुमति देता है;

क्यू sp_trace_setevent- आपको बनाए गए ट्रेस सत्र के लिए आवश्यक घटनाओं का चयन करने की अनुमति देता है;

क्यू sp_trace_setfilter- आपको ट्रेस जानकारी एकत्र करने के लिए फ़िल्टर कॉन्फ़िगर करने की अनुमति देता है;

क्यू sp_trace_setstatus- आपको एक ट्रेस शुरू करने, इसे रोकने या संग्रहीत प्रक्रिया द्वारा बनाए गए ट्रेस को हटाने की अनुमति देता है sp_trace_createवर्तमान सत्र परिभाषा;

क्यू sp_trace_generateevent- आपको एक कस्टम ईवेंट उत्पन्न करने की अनुमति देता है जिसे ट्रेस के दौरान इंटरसेप्ट किया जाएगा।

SQL सर्वर प्रोफाइलर ट्रेस बनाने और ट्रेस परिणामों का विश्लेषण करने के लिए एक ग्राफिकल फ्रंट-एंड है। घटनाओं को एक ट्रेस फ़ाइल में सहेजा जाता है, जिसका विश्लेषण किया जा सकता है या समस्याओं की पहचान करने के लिए चरणों के विशिष्ट अनुक्रमों को फिर से चलाने के लिए उपयोग किया जा सकता है।

इस समय होने वाली क्रियाओं को ट्रैक करने के लिए, आपको MS SQL Profiler लॉन्च करने, एक नया ट्रेस बनाने और संकेतकों के विश्लेषण को कॉन्फ़िगर करने की आवश्यकता है:

"सामान्य" टैब पर, आपको ट्रेस का नाम निर्दिष्ट करना होगा। निर्दिष्ट करें कि सर्वेक्षण किया गया ट्रेस डेटा कहाँ सहेजा जाएगा - एक फ़ाइल और / या एक डेटाबेस तालिका में।

टैब "ईवेंट का चयन करें" बहुत रुचि का है:

यह पृष्ठ ट्रैक करने के लिए ईवेंट निर्दिष्ट करता है। इस उदाहरण में, हम क्वेरी योजनाओं को ट्रैक करने के लिए आवश्यक डेटा का संकेत देंगे।

267 1सी वीडियो ट्यूटोरियल मुफ्त में प्राप्त करें:

डिफ़ॉल्ट रूप से, ट्रेसिंग सभी डेटाबेस में सभी निर्दिष्ट घटनाओं के माध्यम से जाती है। प्राप्त डेटा पर चयन लागू करने के लिए, आपको "कॉलम फ़िल्टर ..." बटन पर क्लिक करना होगा:

उदाहरण के लिए, आइए इन्फोबेस आइडेंटिफ़ायर द्वारा फ़िल्टर सेट करें (आप SELECT DB_ID (N'BaseName ') क्वेरी का उपयोग करके डेटाबेस आईडी का पता लगा सकते हैं)।

1C . के लिए Profiler में अनुरेखण शुरू करना

सभी सेटिंग्स हो जाने के बाद, यह ट्रैकिंग शुरू करना बाकी है, इसके लिए आपको "रन" (रन) पर क्लिक करना होगा। इस क्षण से, फ़िल्टर में निर्दिष्ट सभी क्रियाओं का पता लगाया जाना शुरू हो जाएगा:

उदाहरण के लिए, मैं सबसे अधिक श्रम-गहन संचालन को ट्रैक करने के लिए "माल और सेवाओं की प्राप्तियां" दस्तावेज़ के समय ट्रेस चलाता हूं।

ट्रेस प्राप्त होने के बाद, आपको इसका विश्लेषण करने की आवश्यकता है।

प्रोफाइलर से डेटा का विश्लेषण

विश्लेषण के लिए, परिणामी ट्रेस को किसी फ़ाइल या तालिका में सहेजा जा सकता है। हम डेटाबेस तालिका में सहेजेंगे:

इस अध्याय में, हम संग्रहित प्रक्रियाओं की खोज जारी रखेंगे, जिसे हमने "संग्रहीत कार्यविधियों का निर्माण और प्रबंधन" में शुरू किया था। आप Microsoft SQL सर्वर क्वेरी एनालाइज़र और SQL सर्वर प्रोफाइलर का उपयोग करके संग्रहीत कार्यविधियों और अन्य T-SQL कथनों का विश्लेषण करना सीखेंगे। इस विश्लेषण से, आप निर्धारित कर सकते हैं कि टी-एसक्यूएल कथन कितने प्रभावी हैं। एक कुशल SQL सर्वर क्वेरी संसाधित पंक्तियों की संख्या को कम करने और I / O की मात्रा को कम करने के लिए संचालन के सही अनुक्रम और सही अनुक्रमणिका का उपयोग करती है।

क्वेरी एनालाइज़र का उपयोग करके, आप T-SQL स्टेटमेंट के लिए चयनित निष्पादन योजना देख सकते हैं क्वेरी अनुकूलकएस क्यू एल सर्वर। क्वेरी अनुकूलकएक आंतरिक मॉड्यूल है जो प्रत्येक टी-एसक्यूएल कथन के लिए सर्वोत्तम निष्पादन योजना की तलाश करता है। क्वेरी अनुकूलकप्रत्येक टी-एसक्यूएल स्टेटमेंट का विश्लेषण करता है, कई संभावित निष्पादन योजनाओं को देखता है, और आवश्यक संसाधनों और प्रसंस्करण समय के संदर्भ में प्रत्येक योजना की "लागत" का अनुमान लगाता है। सबसे कम लागत वाली योजना का चयन किया जाता है। प्रत्येक योजना की लागत उपलब्ध आंकड़ों के आधार पर निर्धारित की जाती है जो सिस्टम द्वारा एकत्र किए जाते हैं और पुराने हो सकते हैं। जैसा कि आप अपने डेटाबेस और अपने डेटा के बारे में इससे अधिक जान सकते हैं क्वेरी अनुकूलक, तो आप एक ऐसी योजना बनाने में सक्षम हो सकते हैं जो क्वेरी ऑप्टिमाइज़र से बेहतर हो। क्वेरी विश्लेषक द्वारा प्रदान की जाने वाली जानकारी का उपयोग करके, आप यह निर्धारित कर सकते हैं कि किसी विशेष कथन के लिए क्वेरी ऑप्टिमाइज़र योजना काम करेगी या नहीं, और यदि नहीं, तो आप उस कथन को संशोधित करके या SQL संकेत का उपयोग करके अनुकूलित करने का प्रयास कर सकते हैं। इस अध्याय में, आप सीखेंगे कि क्वेरी एनालाइज़र का उपयोग करने के बारे में अपने सीखने के पूरक के लिए टी-एसक्यूएल स्टेटमेंट को कैसे अनुकूलित किया जाए।

प्रोफाइलर का उपयोग करके, आप अपने SQL सर्वर सिस्टम के भीतर संचालन का विश्लेषण कर सकते हैं यह निर्धारित करने के लिए कि कौन से SQL कथन और संग्रहीत कार्यविधियाँ अतिरिक्त सिस्टम संसाधनों का उपयोग कर रही हैं। इस जानकारी के साथ, आप अपने ट्यूनिंग प्रयासों को मुख्य रूप से इन बयानों और संग्रहीत प्रक्रियाओं पर केंद्रित कर सकते हैं। प्रोफाइलर का उपयोग करने के तरीके का वर्णन करने के अलावा, यह अध्याय आपको यह भी दिखाता है कि प्रोफाइलर से प्राप्त जानकारी का अधिकतम लाभ कैसे उठाया जाए।

SQL क्वेरी विश्लेषक का उपयोग करना

क्वेरी एनालाइज़र को बदलने के लिए Microsoft SQL Server 2000 के साथ आता है

हमारे काम में, हम अक्सर ऐसी स्थिति में आते हैं जहां एक निश्चित अनुरोध धीरे-धीरे काम कर रहा है, और अनुरोध के पाठ में कोई स्पष्ट समस्या दिखाई नहीं दे रही है। आमतौर पर, इस मामले में, समस्या की गहराई से जांच करना आवश्यक है। एक नियम के रूप में, SQL क्वेरी और उसकी योजना के पाठ को देखना आवश्यक हो जाता है, और यहीं पर SQLProfiler हमारी मदद करता है।

SQL Profiler क्या है और इसकी आवश्यकता क्यों है

SQLProfiler MS SQL सर्वर के साथ आपूर्ति किया गया एक प्रोग्राम है और इसे SQL सर्वर में होने वाली सभी घटनाओं को देखने और देखने के लिए डिज़ाइन किया गया है, या, दूसरे शब्दों में, ट्रेस रिकॉर्ड करने के लिए। 1C प्रोग्रामर को SQLProfiler की आवश्यकता क्यों हो सकती है? कम से कम SQL में किसी क्वेरी का टेक्स्ट प्राप्त करने और उसकी योजना देखने के लिए। बेशक, यह एक तकनीकी पत्रिका की मदद से किया जा सकता है, लेकिन इसके लिए कुछ कौशल की आवश्यकता होती है, और टीजे में योजना इतनी सुंदर और पठनीय नहीं है। प्रोफाइलर में, आप न केवल एक पाठ्य, बल्कि एक ग्राफिकल क्वेरी निष्पादन योजना भी देख सकते हैं, जो मेरी राय में, बहुत अधिक सुविधाजनक है। इसके अलावा, प्रोफाइलर का उपयोग करके, आप यह निर्धारित कर सकते हैं: एक निश्चित समय से अधिक समय के लिए अनुरोध, ताले पर एक विशिष्ट प्रतीक्षा तालिका के लिए अनुरोध, डेडलॉक टाइमआउट और बहुत कुछ ...

एसक्यूएल प्रोफाइलर के साथ प्रश्नों का विश्लेषण

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

1. SQL Profiler प्रारंभ करें - सभी प्रोग्राम - Microsoft SQL Server 2008 R2 - उत्पादकता उपकरण - SQLProfiler चलाएं
2. एक नई ट्रेस फ़ाइल बनाएँ - ट्रेस बनाएँ (Ctrl + N)
3. उस DBMS सर्वर को निर्दिष्ट करें जिस पर हमारा डेटाबेस स्थित है और "कनेक्ट" पर क्लिक करें।

स्वाभाविक रूप से, कुछ भी आपको दूसरे कंप्यूटर पर स्थित DBMS सर्वर को ट्रेस करने से नहीं रोकता है। 4. दिखाई देने वाली विंडो में "ट्रेस गुण" दूसरे टैब पर जाएं "घटनाओं का चयन करें"

5. अब आपको इन घटनाओं की घटनाओं और गुणों को निर्दिष्ट करने की आवश्यकता है जिन्हें हम ट्रेस में देखना चाहते हैं। हमें प्रश्नों और क्वेरी योजनाओं की आवश्यकता है, इसलिए हमें संबंधित घटनाओं को सक्षम करने की आवश्यकता है। गुणों और ईवेंट की पूरी सूची प्रदर्शित करने के लिए, "सभी कॉलम दिखाएं" और "सभी ईवेंट दिखाएं" फ़्लैग सक्षम करें. अगला, आपको केवल नीचे दिए गए चित्र में दिखाए गए ईवेंट का चयन करने की आवश्यकता है, अन्य सभी ईवेंट अक्षम होने चाहिए।


घटनाओं का विवरण: ShowplanStatisticsProfile - क्वेरी निष्पादन की पाठ योजना।
ShowplanXMLStatisticsProfile - ग्राफिकल क्वेरी निष्पादन योजना।
RPC: पूर्ण - अनुरोध का पाठ यदि इसे एक प्रक्रिया के रूप में निष्पादित किया जाता है (यदि मापदंडों के साथ 1C अनुरोध निष्पादित किया जाता है)।
SQL: बैच पूर्ण - अनुरोध का पाठ, यदि इसे सामान्य अनुरोध के रूप में निष्पादित किया जाता है (यदि पैरामीटर के बिना 1C अनुरोध निष्पादित किया गया था)।

6. अब आपको ईवेंट के लिए फ़िल्टर कॉन्फ़िगर करने की आवश्यकता है। यदि ऐसा नहीं किया जाता है, तो हम इस DBMS सर्वर पर स्थित सभी डेटाबेस के लिए अनुरोध देखेंगे। "कॉलम फ़िल्टर" बटन पर क्लिक करें और डेटाबेस नाम से फ़िल्टर निर्दिष्ट करें

अब हम "TestBase_8_2" डेटाबेस के लिए केवल ट्रेस प्रश्नों को देखेंगे। यदि आप चाहें, तो आप अन्य फ़ील्ड पर फ़िल्टर डाल सकते हैं, उनमें से सबसे दिलचस्प: अवधि, टेक्स्टडेटा (आमतौर पर क्वेरी टेक्स्ट) और RowCounts (की संख्या) क्वेरी द्वारा लौटाई गई पंक्तियाँ)।

उदाहरण के लिए, यदि मुझे "TestBase_8_2" डेटाबेस में "_InfoRg4312" तालिका में 3 सेकंड से अधिक समय तक चलने वाले सभी अनुरोधों को पकड़ने की आवश्यकता है, तो मैं यह करता हूं:
ए) डेटाबेस द्वारा फ़िल्टर करें, उदाहरण ऊपर दिखाया गया है
बी) मिलीसेकंड में अवधि के अनुसार फ़िल्टर करें।

सी) अनुरोध टेक्स्ट द्वारा फ़िल्टर करें


यहां हम मुखौटा निर्दिष्ट करते हैं। यदि आपको कई तालिकाओं को संदर्भित करने वाली क्वेरी ट्रैक करने की आवश्यकता है, तो "जैसा दिखता है" अनुभाग में कई आइटम बनाएं। सभी फ़िल्टर स्थितियां एक साथ काम करती हैं।

7. अब आप ट्रेस करना शुरू कर सकते हैं। "रन" पर क्लिक करें, उसके बाद ट्रेसिंग काम करना शुरू कर देती है, और आप उन ईवेंट को देख सकते हैं जिन्हें आपने प्रदर्शित करने के लिए कॉन्फ़िगर किया है और जो आपके फ़िल्टर के अंतर्गत आते हैं। ट्रेसिंग को नियंत्रित करने के लिए, आप कमांड बार के बटनों का उपयोग कर सकते हैं।


बाएं से दाएं: इरेज़र - ट्रेसिंग विंडो को साफ़ करता है, स्टार्ट - ट्रेसिंग शुरू करता है, पॉज़ - ट्रेसिंग को रोकता है, जब आप स्टार्ट पर क्लिक करते हैं, ट्रेसिंग रिज्यूमे, स्टॉप - ट्रेसिंग बंद कर देता है

8. ट्रेस विंडो में ही दो भाग होते हैं। सबसे ऊपर इवेंट और इवेंट प्रॉपर्टी हैं। सबसे नीचे, घटना के प्रकार के आधार पर अलग-अलग जानकारी प्रदर्शित होती है। हमारे मामले में, या तो अनुरोध टेक्स्ट या इसकी योजना यहां प्रदर्शित की जाएगी।

9. आइए 1C क्वेरी कंसोल में अनुरोध निष्पादित करें और देखें कि यह प्रोफाइलर में कैसे दिखाई देगा।


ट्रेस से पता चलता है कि कई अनुरोध थे, और उनमें से केवल एक ही हमारा है। शेष अनुरोध सेवा अनुरोध हैं।

10. घटनाओं के गुणों से, आप समझ सकते हैं: क्वेरी कितने सेकंड चल रही थी (अवधि), कितने लॉजिकल रीड्स (रीड्स) थे, परिणाम के रूप में क्वेरी कितनी पंक्तियाँ लौटीं (RowCounts), आदि। मेरे मामले में, अनुरोध में 2 मिलीसेकंड लगे, 4 बूलियन ने पढ़ा और 1 पंक्ति लौटा दी।

11. यदि हम एक घटना और ऊपर जाते हैं, तो हम चित्र योजना को चित्रमय रूप में देख सकते हैं।
जैसा कि आप योजना से देख सकते हैं, खोज मूल्य के आधार पर सूचकांक द्वारा की जाती है, हालांकि इस योजना को आदर्श नहीं कहा जा सकता है, क्योंकि इंडेक्स कवर नहीं कर रहा है, कोड और नाम फ़ील्ड KeyLookup का उपयोग करके प्राप्त किए जाते हैं, जिसमें 50% समय लगता है।


संदर्भ मेनू का उपयोग करके, ग्राफिकल योजना को * .SQLPlan एक्सटेंशन के साथ एक अलग फ़ाइल में सहेजा जा सकता है और किसी अन्य कंप्यूटर पर या अधिक उन्नत SQL संतरी योजना एक्सप्लोरर प्रोग्राम का उपयोग करके प्रोफाइलर में खोला जा सकता है।

12. अगर हम और भी ऊपर जाते हैं, तो हम वही क्वेरी प्लान देखेंगे, लेकिन टेक्स्ट फॉर्म में। यह वह योजना है जो TZ, MCC और अन्य 1C प्रदर्शन निगरानी उपकरणों में प्रदर्शित होती है। इसका विश्लेषण करने के लिए, मैं नोटपैड ++ जैसे हाइलाइटिंग के साथ एक उन्नत टेक्स्ट एडिटर का उपयोग करने की सलाह देता हूं।

13. "फ़ाइल-इस रूप में सहेजें" मेनू का उपयोग करके, संपूर्ण ट्रेस को विभिन्न स्वरूपों में सहेजा जा सकता है:
ए) प्रोफाइलर के प्रारूप में ही, अर्थात। विस्तार के साथ * .trc
बी) एक्सएमएल प्रारूप के लिए
ग) आप ट्रेस से एक टेम्पलेट बना सकते हैं। अगला आइटम देखें।
d) आप ट्रेस को डेटाबेस टेबल के रूप में सेव कर सकते हैं। एक सुविधाजनक तरीका अगर हमें खोजने की ज़रूरत है, उदाहरण के लिए, पूरे ट्रेस में सबसे धीमा अनुरोध, या कुछ पैरामीटर द्वारा अनुरोध का चयन करें। फ़ाइल - इस रूप में सहेजें - ट्रेस तालिका - डीबीएमएस सर्वर का चयन करें और उससे कनेक्ट करें इसके बाद, आपको निर्दिष्ट सर्वर पर डेटाबेस का चयन करना होगा और उस तालिका का नाम निर्दिष्ट करना होगा जहां ट्रेस सहेजा जाएगा। आप एक मौजूदा तालिका का चयन कर सकते हैं, या एक नया नाम लिख सकते हैं और फिर तालिका स्वचालित रूप से चयनित डेटाबेस में बनाई जाएगी।

यह ध्यान में रखा जाना चाहिए कि अवधि एक सेकंड के मिलियनवें हिस्से में तालिका में संग्रहीत होती है और परिणाम प्रदर्शित करते समय, मान को मिलीसेकंड में परिवर्तित करना वांछनीय होता है। साथ ही, RowNumber कॉलम को टेबल में जोड़ा जाता है, जो ट्रेस में इस रो की संख्या को दिखाता है।

14. यदि आपको प्रश्नों का विश्लेषण करने के लिए अक्सर प्रोफाइलर का उपयोग करने की आवश्यकता होती है, तो आवश्यक फ़िल्टर और ईवेंट सेट करना जल्दी से ऊब जाएगा और समय लेने वाला होगा। ट्रेस टेम्प्लेट बचाव में आते हैं, जहां हम फ़िल्टर और कॉलम ऑर्डर निर्दिष्ट करते हैं जिनकी हमें आवश्यकता होती है, और फिर एक नया ट्रेस बनाते समय बस इस टेम्पलेट का चयन करें। टेम्प्लेट बनाने के लिए, मेनू का उपयोग करें फ़ाइल - टेम्प्लेट - नया टेम्प्लेट

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

अब, एक नया ट्रेस बनाते समय, आप केवल आवश्यक टेम्पलेट निर्दिष्ट कर सकते हैं, उसके बाद, दूसरे टैब पर, सभी फ़िल्टर और ईवेंट स्वचालित रूप से भर जाएंगे।

बेशक, इस अद्भुत उपकरण का उपयोग करने के सभी तरीकों से दूर यहां दिखाया गया है, यदि दर्शक रुचि रखते हैं, तो भविष्य में इस विषय पर लेखों के संग्रह को फिर से भरना संभव होगा।

16.05.2000 इत्ज़िक बेन-गण

जिस तरह किसी अपराध के दृश्य का पुनर्निर्माण करने से अपराधी का पता लगाने में मदद मिलती है, उसी तरह डेटाबेस का पता लगाने से बाधाओं की पहचान करने और उन्हें ठीक करने में मदद मिल सकती है।

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

ट्रैक को पुन: प्रस्तुत करने के लिए प्रारंभिक तैयारी

SQL Profiler का उपयोग करके, आप समस्याग्रस्त अनुप्रयोगों को डीबग करने के लिए सहेजे गए ट्रेस को फिर से चला सकते हैं, परीक्षण के लिए वास्तविक जीवन परिदृश्य बना सकते हैं, डेटाबेस को ट्यून कर सकते हैं, और बहुत कुछ कर सकते हैं। यदि आपको ट्रैक पर फिर से चलने की आवश्यकता है, तो आपको कुछ प्रारंभिक कार्य करना होगा। सबसे पहले, आपको विशिष्ट घटनाओं और डेटा के कॉलम को ट्रैक करने के लिए एक ट्रेस को परिभाषित करने की आवश्यकता है, इसके अलावा जो आपकी रुचि रखते हैं। इन अतिरिक्त ईवेंट और कॉलम को कैप्चर करना सुनिश्चित करता है कि सभी गतिविधियाँ ठीक उसी तरह दोहराएं जैसे उन्होंने पहले किया था। दूसरा, आपको ट्रेस परिणामों को किसी फ़ाइल, तालिका या SQL स्क्रिप्ट में सहेजना चाहिए।

किसी भी पुन: चलाने के लिए कनेक्ट, डिस्कनेक्ट, मौजूदा कनेक्शन और RPC: प्रारंभ और SQL: बैचस्टार्टिंग ईवेंट को कैप्चर करने की आवश्यकता होती है। इसके अतिरिक्त, सर्वर-साइड API कर्सर (अर्थात, API कर्सर फ़ंक्शन द्वारा नियंत्रित सर्वर कर्सर) चलाते समय, आपको CursorExecute, CursorOpen, और CursorPrepare ईवेंट को कैप्चर करना होगा। तैयार सर्वर-साइड SQL कथनों को चलाने के लिए, Exec तैयार SQL जोड़ें और SQL ईवेंट तैयार करें। रीप्ले के लिए कॉलम की आवश्यकता होगी जिसमें निम्नलिखित डेटा होगा: एप्लिकेशन का नाम, बाइनरी जानकारी, कनेक्शन आईडी या सर्वर प्रोसेस आईडी (एसपीआईडी), डेटाबेस आईडी, इवेंट क्लास, इवेंट सबक्लास, होस्टनाम, संख्यात्मक जानकारी, सर्वर नाम, उपयोगकर्ता नाम एसक्यूएल, प्रारंभ समय और पाठ जानकारी।

यह ध्यान रखना महत्वपूर्ण है कि बार-बार चलने के दौरान, कैप्चर की गई घटनाओं का अनुकरण नहीं किया जाता है, वे नए सिरे से घटित होती हैं। इसलिए, ध्यान रखें कि प्रारंभिक ट्रेसिंग के दौरान, आपने संभवतः अपना डेटाबेस बदल दिया था। उदाहरण के लिए, जब एक INSERT स्टेटमेंट वाले ट्रेस को वापस चलाया जाता है, तो तालिका में एक डुप्लिकेट कुंजी दिखाई दे सकती है। इन समस्याओं से बचने के लिए, आपको डेटाबेस को उसकी मूल स्थिति में रीसेट करना चाहिए यदि स्रोत सर्वर पर ट्रेस पुन: उत्पन्न होता है (अर्थात, उस सर्वर पर जिस पर मूल ट्रेस चलाया गया था)।

यदि पुन: चलाएँ किसी भिन्न सर्वर पर होगा, तो यह सुनिश्चित करना महत्वपूर्ण है कि उस सर्वर पर डेटाबेस मूल सर्वर पर डेटाबेस के समान स्थिति में है। इस मामले में, उसी उपयोगकर्ता नाम, उनकी अनुमतियों, डेटाबेस पहचानकर्ताओं का उपयोग करना अनिवार्य है जो स्रोत सर्वर पर उपयोग किए गए थे।

समान पहचानकर्ताओं का उपयोग करने के लिए विशेष कौशल और अनुभव की आवश्यकता होती है, विशेष रूप से Microsoft डेटाबेस पहचानकर्ताओं को बदलने के लिए सीधे sysdatabases सिस्टम तालिका तक पहुँचने को हतोत्साहित करता है। आप दूसरे तरीके से मेल खाने वाले डेटाबेस आईडी प्रदान कर सकते हैं। ऐसा करने के लिए, स्रोत सर्वर से उपयोगकर्ता डेटाबेस फ़ाइलों की प्रतिलिपि बनाएँ जहाँ ट्रेस वापस चलाया जाएगा, और फिर स्रोत सर्वर से मास्टर डेटाबेस की बैकअप प्रतिलिपि को पुनर्स्थापित करें। एक वैकल्पिक तरीका यह है कि रन के लिए चुने गए सर्वर पर स्रोत सर्वर से बैकअप किए गए उपयोगकर्ता डेटाबेस को पुनर्स्थापित करें, और फिर वहां मास्टर डेटाबेस बैक-अप को पुनर्स्थापित करें। दोनों ही मामलों में, सर्वर पर जहां ट्रेस चलाया जा रहा है, डेटाबेस फ़ाइलें स्रोत सर्वर पर उसी निर्देशिका में स्थित होंगी, और मास्टर डेटाबेस सिस्टम टेबल में मूल डेटाबेस आईडी होंगे। इन समस्याओं से पूरी तरह छुटकारा पाने के लिए, आपको बस ट्रेस से डेटाबेस आईडी कॉलम को हटाना होगा और ट्रेस के दौरान कैप्चर किए गए प्रत्येक उपयोगकर्ता के लिए डिफ़ॉल्ट डेटाबेस सेट करना होगा।

आप स्क्रिप्ट के सिंक स्तर और प्लेबैक गति को भी नियंत्रित कर सकते हैं। SQL सर्वर रीप्ले संवाद बॉक्स में प्रवेश करने के लिए रीप्ले मेनू से सेटिंग्स का चयन करें। सिंक्रोनाइज़ेशन लेवल पैरामीटर, जो कनेक्शन के भीतर सिंक्रोनाइज़ेशन को नियंत्रित करता है, निम्नलिखित मान ले सकता है:

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

रीप्ले दर पैरामीटर, रीप्ले दरें, निम्न में से किसी एक मान पर सेट की जा सकती हैं:

जितनी जल्दी हो सके।यह डिफ़ॉल्ट है, इस मामले में अगली घटना पिछले एक के समाप्त होने के तुरंत बाद शुरू होती है। घटनाओं के बीच अंतराल बनाए रखें।यह मान घटनाओं के घटित होने के बीच मूल समय अंतराल को बनाए रखता है। समय शुरू करने के लिए संबंध बनाए रखें।इस मान के साथ, घटनाएँ उसी समय घटित होती हैं जब मूल ट्रेस में ट्रेस प्लेबैक की शुरुआत के सापेक्ष घटनाएँ होती हैं।

ट्रैक प्लेबैक का संगठन

मान लीजिए कि आप तैयार सर्वर SQL स्टेटमेंट के निष्पादन ट्रेस को फिर से चलाना चाहते हैं, जो कि उपयोगकर्ता द्वारा ADO, OLE DB, या ODBC के माध्यम से सर्वर पर भेजे गए Transact-SQL (T-SQL) स्टेटमेंट हैं। SQL सर्वर 7.0 सर्वर-साइड तैयार किए गए SQL कथनों को sp_prepare और sp_execute छद्म-निरंतर प्रक्रियाओं का उपयोग करके निष्पादित करता है जिन्हें क्लाइंट अनुप्रयोग द्वारा कहा जाता है।

Sp_prepare SQL सर्वर को निष्पादन के लिए T_SQL कथनों को संकलित करके और निष्पादन योजनाओं को कैश में रखकर तैयार करने का कारण बनता है। जब sp_execute कहा जाता है, SQL सर्वर पूर्व-कैश्ड योजनाओं को निष्पादित करता है, और संभवतः एक से अधिक बार ऐसा करता है। संग्रहीत कार्यविधि के लिए प्रत्येक कॉल RPC ईवेंट उठाता है: बैचस्टार्टिंग, SQL तैयार करें, और Exec तैयार SQL। यही कारण है कि इन घटनाओं को ट्रेस परिभाषा में शामिल किया जाना चाहिए।

SQL Profiler कई नमूना ट्रेस परिभाषाएँ प्रदान करता है जिनका उपयोग आप टेम्प्लेट के रूप में कर सकते हैं। इसमें उदाहरण संख्या 6, "रीप्ले के लिए टी-एसक्यूएल" शामिल है, जो एक ट्रेस को फिर से चलाने के लिए संदर्भित करता है। यह उदाहरण रीप्ले के दौरान उत्पन्न ट्रेस आउटपुट को निर्दिष्ट करने के लिए उपयोगी है। प्लेबैक के लिए सहेजे गए ट्रेस आउटपुट को खोलने के लिए, फ़ाइल मेनू से खोलें चुनें और ट्रेस के दौरान एकत्रित जानकारी को संग्रहीत करने के लिए फ़ाइल, तालिका या SQL स्क्रिप्ट का चयन करें। आप तालिका 1 में दिखाए गए विकल्पों का उपयोग करके प्लेबैक को नियंत्रित कर सकते हैं। उन्हें रीप्ले मेनू के आइटम या टूलबार पर बटन द्वारा दर्शाया जा सकता है।

विस्तारित संग्रहीत कार्यविधियों का उपयोग करना

SQL Profiler से कुछ ट्रेसिंग कार्यक्षमता उपलब्ध नहीं है। इनमें शेड्यूल पर ट्रेस ट्रिगर करना, विशिष्ट ईवेंट होने पर ट्रिगर करना या SQL सर्वर के प्रारंभ होने पर ट्रिगर करना शामिल है। इसके अलावा, SQL Profiler को Windows NT या Windows 2000 एप्लिकेशन लॉग में ट्रेस भेजने के लिए कॉन्फ़िगर नहीं किया जा सकता है। इन कार्यों को करने के लिए और ट्रेस पर अधिक प्रोग्रामेटिक नियंत्रण प्रदान करने के लिए, आप विस्तारित संग्रहीत कार्यविधियों के एक सेट का उपयोग कर सकते हैं जिसे सामूहिक रूप से xp_trace * कहा जाता है।

आइए देखें कि कैसे इन संग्रहीत कार्यविधियों का उपयोग ट्रेस को रोकने के लिए sp_start_mytrace ट्रेस और sp_stop_mytrace संग्रहीत कार्यविधि को प्रारंभ करके किया जा सकता है। पहली संग्रहित प्रक्रिया, sp_start_mytrace, ट्रेस इवेंट, डेटा कॉलम, फ़िल्टर को परिभाषित करती है, और कैप्चर की गई घटनाओं को संग्रहीत करने के लिए एक कतार बनाती है। यह फिर कतार से घटनाओं को पुनः प्राप्त करता है और उन्हें सिस्टम फ़ाइल में रखता है। Sp_start_mytrace घटना कतार के साथ संचार करता है और कतार के निर्माण के दौरान प्रक्रिया द्वारा बनाए गए कतार हैंडल पूर्णांक के माध्यम से इसकी स्थिति की निगरानी करता है। Sp_stop_mytrace इस हैंडल का उपयोग तब करता है जब इसे कतारबद्ध करना बंद करने की आवश्यकता होती है।

कतार के हैंडल की स्थिति पर नज़र रखना कोई आसान काम नहीं है। यद्यपि इसका मूल्य प्राप्त करने के कई तरीके हैं, सबसे सरल और सबसे कार्यात्मक तरीका एक तालिका बनाना है जिसमें सभी निशान और उनकी कतारों के बारे में डेटा दर्ज किया जाएगा, साथ ही उस समय जब ट्रेस शुरू हुआ, उपयोगकर्ता आईडी जो चालू हो गया ट्रेस और उस कंप्यूटर का नाम जिससे इसे भेजा गया था। लॉन्च किया गया। लिस्टिंग 1 उन बयानों को दिखाता है जो ऐसी तालिका बनाते हैं जिन्हें सक्रियट्रेस कहा जाता है। यह देखने के लिए कि वर्तमान में कौन से निशान लिए जा रहे हैं, बस इस तालिका को देखें। ट्रेसिंग को रोकने के लिए, आपको टेबल से उपयुक्त क्यू डिस्क्रिप्टर को क्वेरी करने की आवश्यकता है।

ट्रेसिंग शुरू करने के लिए संग्रहीत प्रक्रिया

आइए इन दो संग्रहीत प्रक्रियाओं के माध्यम से देखें कि ट्रेस कैसे शुरू होता है और कैसे रुकता है। ट्रेसिंग प्रारंभ करने वाली संग्रहीत कार्यविधि में चार वैकल्पिक इनपुट पैरामीटर होते हैं। पहले दो, @spid_filter और @dbid_filter, आपको ट्रेस के दौरान एकत्र की गई जानकारी को केवल एक विशिष्ट सर्वर प्रक्रिया (इसकी SPID द्वारा पहचानी गई) और किसी दिए गए डेटाबेस से संबंधित जानकारी तक सीमित रखने की अनुमति देते हैं। यदि ये पैरामीटर निर्दिष्ट नहीं हैं, तो ट्रेस सभी प्रक्रियाओं और डेटाबेस के बारे में डेटा एकत्र करेगा। @email_address पैरामीटर आपको एक ईमेल पता निर्दिष्ट करने की अनुमति देता है जिस पर ट्रेस की प्रगति के बारे में विस्तृत जानकारी भेजी जाएगी। यदि यह पैरामीटर निर्दिष्ट नहीं है, तो sp_start_mytrace केवल स्क्रीन पर जानकारी प्रदर्शित करेगा। यदि यह निर्दिष्ट है, लेकिन पता गलत है, तो संग्रहीत कार्यविधि एक त्रुटि संदेश उत्पन्न करेगी और बाहर निकल जाएगी। अंतिम पैरामीटर, @filename, का उपयोग उस फ़ाइल के नाम को निर्दिष्ट करने के लिए किया जाता है जिसमें ट्रेस के दौरान एकत्र की गई जानकारी भेजी जाएगी। यदि यह पैरामीटर निर्दिष्ट नहीं है, तो डिफ़ॉल्ट जानकारी को c: \ mytraceN.trc फ़ाइल में रखा जाएगा, जहाँ N क्यू डिस्क्रिप्टर संख्या है। यह कन्वेंशन, जो ट्रेस डेटा के साथ फाइलों के नामकरण के नियम को परिभाषित करता है, एक ही समय में कई निशानों को कैप्चर करने की अनुमति देता है, उनमें से किसी एक को केवल अपने लिए परिणाम रिकॉर्ड करने के लिए फ़ाइल को लॉक करने की अनुमति नहीं देता है।

यह जांचने के लिए कि ट्रिगर काम करता है या नहीं, फ़ाइल गुण बदलें:

डेटाबेस बदलें परीक्षण फ़ाइल संशोधित करें (नाम = `testdb_dat`, MAXSIZE = 30 एमबी)

आपको एक संदेश प्राप्त होगा कि फ़ाइल गुण बदल गए हैं:

फ़ाइल गुण परिवर्तित:
कथन: ALTER DATABASE testdb फ़ाइल को संशोधित करें (NAME = `testdb_dat`,
अधिकतम आकार = 30 एमबी)
NT उपयोगकर्ता नाम: Gandalf
आवेदन का नाम: एमएस एसक्यूएल क्वेरी विश्लेषक
SQL उपयोगकर्ता नाम: NA
समय: 2000-11-22 14:15:28

यह पता लगाना हमेशा बहुत मुश्किल होता है कि किन घटनाओं के कारण गतिरोध पैदा हुआ। हालाँकि, SQL Profiler विशेष ईवेंट प्रदान करता है जो "जांच" को बहुत सुविधाजनक बना सकता है। उदाहरण के लिए, आप ट्रेस का उपयोग करके लॉक: डेडलॉक ईवेंट की घटना का पता लगा सकते हैं। इस घटना की शुरुआत कहते हैं

कि गतिरोध उत्पन्न हो गया है। यह यूजर को सर्वर प्रोसेस आईडी (SPID), ब्लॉक किए गए ट्रांजेक्शन की आईडी, ब्लॉक का समय, एप्लिकेशन का नाम और यूजर आईडी बताता है। लॉक: डेडलॉक चेन इवेंट बेहद आसान है, जो हर बार लॉक होने पर उत्पन्न होता है: यह आपको प्रक्रिया पहचानकर्ता (एसपीआईडी) और लेनदेन का पता लगाने की अनुमति देता है।

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

गतिरोध की स्थिति उत्पन्न करने के लिए, दो तालिकाएँ बनाएँ, t1 और t2, जिनमें से प्रत्येक में केवल एक पूर्णांक स्तंभ है। प्रत्येक तालिका में मान 1 वाली एक पंक्ति दर्ज करें। ट्रेस सेट करें जिसमें घटनाओं का निम्नलिखित सेट दर्ज किया जाएगा: लॉक: डेडलॉक, लॉक: डेडलॉक चेन, और स्टेटमेंट निष्पादन की शुरुआत और अंत की संबंधित घटनाएं (आरपीसी, एसपी , एसक्यूएल)। अवरोधन के इच्छित स्रोत के आधार पर चुनाव किया जाना चाहिए। हमारे उदाहरण में, हमें केवल SQL: StmtStarting और SQL: StmtCompleted ईवेंट की आवश्यकता है।

डिफ़ॉल्ट डेटा कॉलम के अलावा, लेन-देन आईडी और अपनी पसंद के कॉलम रखने के लिए एक कॉलम जोड़ें। आप जिस डेटाबेस के साथ काम कर रहे हैं उसकी आईडी से मेल खाने वाला ट्रेस फ़िल्टर स्थापित करें। फिर क्वेरी एनालाइज़र से सर्वर से दो कनेक्शन खोलें। पहले कनेक्शन से, करें:

आरंभिक लेनदेन अद्यतन t1 SET col1 = 1

कनेक्शन 2 पर, निम्नलिखित लेनदेन शुरू करें:

लेनदेन शुरू करें
अद्यतन t2 सेट col1 = 1
चुनें * t1 . से
प्रतिबद्ध लेनदेन

अंत में, कनेक्शन 1 में, कथनों को निष्पादित करें:

चुनें * t2 से
प्रतिबद्ध लेनदेन

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

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

अंतिम टिप्पणी

SQL सर्वर 7.0 में ट्रेसिंग के लिए विस्तारित संग्रहीत कार्यविधियों के साथ SQL Profiler की ट्रेसबैक क्षमताएं, आपको डेटाबेस प्रदर्शन को डीबग करने में सक्षम बनाती हैं। चाहे आप अपने SQL सर्वर वातावरण के स्वास्थ्य की निगरानी करना चाहते हों या एप्लिकेशन प्रदर्शन समस्याओं से निपटना चाहते हों, यह समय आपके ज्ञान को व्यवहार में लाने का है।

इत्ज़िक बेन गानू [ईमेल संरक्षित]एमसीडीबीए, एमसीएसई + आई, एमसीएसडी, एमसीटी और एसक्यूएल सर्वर एमवीपी प्रमाणन रखता है। वह हाई-टेक कॉलेज इज़राइल में SQL सर्वर पाठ्यक्रम में एक वरिष्ठ व्याख्याता और इज़राइल SQL सर्वर उपयोगकर्ता समूह के अध्यक्ष हैं।

इसे साझा करें