प्रोफाइल कैसे संग्रहीत प्रक्रियाओं के लिए


26

मैं SQL Server 2012 का उपयोग कर रहा हूं और सोच रहा था कि संग्रहीत प्रक्रियाओं को कैसे प्रोफाइल किया जाए

उदाहरण के लिए, प्रोफाइलर प्रत्येक व्यक्ति के एसक्यूएल स्टेटमेंट को एक संग्रहीत कार्यविधि में कैद कर सकता है, यह क्या है, और इसे चलाने में कितना समय लगता है आदि?

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

जवाबों:


27

केविन का जवाब बताता है कि एसक्यूएल ट्रेस / एसक्यूएल प्रोफाइलर में किन घटनाओं को कैप्चर करना है। उस उत्तर पर थोड़ा विस्तार करने के लिए - SP:StmtCompletedआपको एक संग्रहीत प्रक्रिया के भीतर प्रत्येक कथन को पूरा किया जाएगा, जैसा कि यह लगता है।

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

हालांकि यह जानकारी विस्तारित ईवेंट्स के माध्यम से उपलब्ध है, मैं फिर भी एसक्यूएल ट्रेस (एसक्यूएल प्रोफाइलर के पीछे की तकनीक) का उपयोग करने का सुझाव दूंगा, लेकिन इसके बजाय किसी फ़ाइल को ट्रेस करना(यदि आप विस्तारित ईवेंट को सीखने और उपयोग करने में निवेश करना चाहते हैं, तो यह जाने का एक तरीका होगा, SQL सर्वर SQL ट्रेस के भविष्य के संस्करण में चला जाएगा और हम सभी विस्तारित इवेंट होंगे)। मैं आपको यह भी सुझाव दूंगा कि आप Column Filters बटन के माध्यम से जितना संभव हो उतना बैकग्राउंड नॉइज़ के माध्यम से फ़िल्टर करें सुनिश्चित करें कि आप केवल वही कैप्चर कर रहे हैं जो आवश्यक है। आप अपने ट्रेस को Profiler टूल के साथ सेटअप कर सकते हैं, केविन अपने अच्छे उत्तर में वर्णित चरणों का उपयोग करके और फिर उसी GUI से फ़िल्टर जोड़ सकते हैं। फिर आप एक स्क्रिप्ट के रूप में ट्रेस को निर्यात कर सकते हैं और उस स्क्रिप्ट को SQL सर्वर पर एक फ़ोल्डर में एक फ़ाइल पर ट्रेसिंग के लिए चला सकते हैं जिसमें डेटाबेस या लेनदेन लॉग फाइल शामिल नहीं है। निर्यात करने के लिए, आप बस अपना ट्रेस सेट करेंगे, इसे कुछ सेकंड के लिए चलाएं बस यह सुनिश्चित करें कि आप जो चाहते हैं उस पर कब्जा कर रहे हैं, इसे रोकें और फिर मेनू बार और File-> पर जाएंExport-> Script Trace Definitionऔर फाइल को सेव करें। फिर उस फ़ाइल को उस नई क्वेरी विंडो में खोलें, जिस सर्वर पर आप ट्रेस करना चाहते हैं। आप इस स्क्रिप्ट के विकल्पों और परिभाषाओं के बारे में अधिक जानकारी प्राप्त कर सकते हैं जो आपने उस स्क्रिप्ट में उपयोग की गई विभिन्न संग्रहीत कार्यविधियों के लिए सहायता लेखों को देखकर बनाई है जो आपने यहां शुरू करके बनाई थी ।

यदि आपके पास समय है और आप सीखना चाहते हैं, तो आप विस्तारित घटनाओं पर कुछ लेख भी पढ़ सकते हैं और यह भी देख सकते हैं कि जानकारी कैसे प्राप्त करें। जोनाथन केहियास ब्लॉग पोस्ट के लिए एक महान संसाधन है जब आप वहां शुरू करने के लिए तैयार होते हैं।


2
एक एसपी के बारे में क्या: StmtCompleted सिर्फ "- एन्क्रिप्टेड पाठ" क्वेरी पाठ में दिखाता है? हम यह कैसे पता लगा सकते हैं कि किन तालिकाओं को एक्सेस किया जा रहा है?
ब्रेन २००

आप के रूप में एक ही समस्या होने @ Brain2000 ....
wenzzzel

21

आप SQL सर्वर Profiler के माध्यम से एक संग्रहीत कार्यविधि में अलग-अलग बयानों पर कब्जा कर सकते हैं। ऐसा करने के लिए, अपने ईवेंट चयन टैब में, "सभी ईवेंट दिखाएं" चेकबॉक्स पर क्लिक करें। फिर, संग्रहीत कार्यविधि श्रेणी में नीचे जाएं और SP: StmtCompleted के बगल में स्थित बॉक्स को चेक करें । यदि आपके पास SQL: BatchStarted और SQL: BatchCompleted इवेंट्स चयनित हैं, तो आप SPID द्वारा सभी को एक साथ बांधते हुए, एक संग्रहीत कार्यविधि रन की शुरुआत-से-अंत की तस्वीर प्राप्त कर सकते हैं।

यह देखने के लिए योजना कैश को देखने में भी मदद मिल सकती है कि क्या आप अपनी धीरे-धीरे कार्य करने की प्रक्रिया के लिए क्वेरी प्लान प्राप्त कर सकते हैं। आप कुछ इस तरह से शुरुआत कर सकते हैं:

SELECT 
    OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
    cp.usecounts AS ExecutionCount,
    st.TEXT AS QueryText,
    qp.query_plan AS QueryPlan
FROM 
    sys.dm_exec_cached_plans AS cp
    CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
    CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE 
    cp.objtype = 'Proc'
    AND OBJECT_NAME(st.objectid,st.dbid) = 'YourStoredProcedure';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.