2009-08-21 31 views
7

मैं ओरेकल डीबी के लिए नया हूं। मेरे पास 2 प्रश्न हैं जो एक ही परिणाम सेट को वापस करते हैं। मैं उनमें से प्रत्येक के प्रदर्शन को मापना चाहता हूं और बेहतर विकल्प चुनना चाहता हूं। मैं ओरेकल एसक्यूएल डेवलपर का उपयोग करके ऐसा कैसे करूं? मुझे याद है कि कुछ औजार आंकड़े प्रदान करते हैं। इन आंकड़ों को कैसे पढ़ा जाए इस पर कोई संकेतक?ऑरैकल में क्वेरी के प्रदर्शन को मापने के लिए कैसे करें

अद्यतन: जैसा कि रॉब वैन द्वारा सुझाया गया है, मैंने अपने प्रश्नों के प्रदर्शन को खोजने के लिए tkprof उपयोगिता का उपयोग किया। कुछ पैरामीटर जिन्हें मैं समझ सकता हूं (गिनती, पंक्तियां, समय बीतने, निष्पादन का समय), लेकिन अधिकांश मैं नहीं कर सका। क्या कोई मुझे उन मापदंडों के महत्व से मदद कर सकता है? नीचे परिणाम हैं।

Query 1: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.01  0.01   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  49  0.26  0.32   45  494   0  23959 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  51  0.28  0.33   45  494   0  23959 

Query2: 
call  count  cpu elapsed  disk  query current  rows 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
Parse  1  0.00  0.00   0   0   0   0 
Execute  1  0.00  0.00   0   0   0   0 
Fetch  33  0.25  0.24   0  904   0  15992 
------- ------ -------- ---------- ---------- ---------- ---------- ---------- 
total  35  0.25  0.24   0  904   0  15992 

मैं तय कर सकता हूं कि क्वेरी 2 क्वेरी से बेहतर है 1. डिस्क, क्वेरी और वर्तमान पैराम पर क्या कोई मदद है ??

+0

आपको लगता है कि क्वेरी 1 और क्वेरी उल्लेख पर एक और समझ की आवश्यकता है 2 एक ही परिणाम सेट वापस। हालांकि, tkprof फ़ाइल से पता चलता है कि क्वेरी 1 23 9 5 9 पंक्तियां देता है, और क्वेरी 2 15 992 पंक्तियां देता है। बिल्कुल बराबर नहीं ... –

+0

ठीक है क्वेरी एक दृश्य निर्माण का हिस्सा है। लौटाई गई पंक्तियों की संख्या अलग-अलग होती है क्योंकि क्वेरी बनाने के तरीके अलग-अलग होते हैं। पहली क्वेरी यूनियनों का उपयोग करती है और दूसरी क्वेरी LOJ का उपयोग करती है और चूंकि पहली क्वेरी यूनियो का उपयोग करती है, इसलिए कुछ रिकॉर्ड डुप्लिकेट किए जाते हैं जो दूसरी क्वेरी – Cshah

उत्तर

9

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

+0

Thx.Yep के मामले में नहीं होता है। मैंने परिणामों को समझाया टैब के अंतर्गत देखा। लागत नामक कॉलम संख्याओं के साथ प्रकट होता है। मुझे यह समझने के लिए ऑरैक डॉक्स में खोदना होगा कि इन नंबरों का क्या मतलब है – Cshah

+2

मैं अत्यधिक उन दस्तावेज़ों में खुदाई करने की सलाह देता हूं। अनुकूलन और ओरेकल ट्यूनिंग पर कुछ googling करो। (बर्लसन के पास कुछ अच्छी चीजें हैं - Google "ओरेकल बर्लसन" एक परामर्श साइट देखने के लिए जिसमें युक्तियां शामिल हैं।) और "योजना की व्याख्या" के साथ आप जो देखते हैं उसके बारे में एक अवलोकन के लिए इसे देखें। http://www.akadia.com/services/ora_interpreting_explain_plan.html जैसा कि एक और टिप्पणी में उल्लेख किया गया है, बस गति की जांच का मतलब बहुत अधिक नहीं है। पर्यावरण चीजों को बदल सकता है - एक सेटिंग में तेजी से दूसरे में धीमा हो सकता है। – user158017

+0

लेकिन सामान सीखना समय ले सकता है। क्या आप सबसे अच्छा है, अब के लिए गति की जांच करें, और फिर जितना हो सके उतना अवशोषित करें और जब आप जाते हैं तो ट्यून करें। – user158017

1

मूल उत्तर - प्रत्येक प्रश्न को दो बार निष्पादित करें और देखें कि कौन सा तेज़ है। सबसे अच्छा हिस्सा - आप ओरेकल प्रदर्शन के बारे में सीखने के बिना ऐसा कर सकते हैं। केवल एक चीज जिसे आप जानना चाहते हैं वह यह है कि आप पहली कोशिश पर भरोसा नहीं कर सकते क्योंकि अधिकांश समय यह डिस्क से डेटा पढ़ेगा जबकि दूसरी कोशिश रैम से कैश किए गए डेटा का उपयोग करेगी। यही कारण है कि आप प्रत्येक क्वेरी को दो बार कोशिश करते हैं।

+1

क्या होगा यदि "तेज" क्वेरी बहुत सारी अस्थायी जगह का उपयोग करती है? एक बार उत्पादन में स्थानांतरित हो जाने के बाद, उस अस्थायी स्थान का उपयोग कर कई उपयोगकर्ताओं के साथ, "तेज़" क्वेरी धीमी हो सकती है क्योंकि यह पेजिंग शुरू कर सकती है। क्वेरी गति निर्धारित करने में समस्या यह है कि उत्तर हमेशा "यह निर्भर करता है"। व्याख्या योजना का उपयोग करना, अस्थायी स्थान का उपयोग करना, और फिर सर्वर वातावरण के संदर्भ में मूल्यांकन करना सबसे अच्छा है। हालांकि यह अच्छा करना मुश्किल है - मैं अभी भी सीख रहा हूं। – user158017

+1

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

3

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

यदि आप पूर्ण संस्करण चाहते हैं, तो Randolf's पर जाएं।

आप एक लघु संस्करण चाहते हैं, पर जाएँ mine:

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

उम्मीद है कि इससे मदद मिलती है।

सम्मान, रॉब।

1

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

ओरेकल के विकास के साथ कुछ भी करने के लिए, टॉम Kyte (Google उसे) द्वारा शुरू करने के लिए एक अच्छी जगह है या the Ask Tom website के माध्यम से खोजना मुश्किल है। यदि आप वास्तव में शामिल होना चाहते हैं

केवल कुछ बार क्वेरी चलाना एक बहुत बुरा विचार है - केवल यह स्वीकार करने के बराबर है कि समझाया गया योजना की लागत आपको सबसे अच्छी क्वेरी बताती है। आपको वास्तव में यह ध्यान रखना होगा कि आपकी क्वेरी किस संसाधन को उठा रही है और इसलिए यह आपको उत्पादन प्रणाली को कैसे प्रभावित कर सकती है।

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

क्वेरी कई बार एक दूसरे तो बुलाया जा रहा है, तो आप पूरी तरह से समझाने की योजना को समझते हैं, और कैसे आप अपने सर्वश्रेष्ठ प्रदर्शन के लिए क्वेरी अनुकूलन कर सकते हैं