Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle में sql ट्यूनिंग कैसे करें

एसक्यूएल ट्यूनिंग का परिचय

  • एसक्यूएल स्टेटमेंट डेटाबेस से डेटा प्राप्त/प्राप्त करने के लिए लिखा जाता है। हम चाहते हैं कि हमारा एसक्यूएल स्टेटमेंट तेजी से चल रहा है (एसक्यूएल ट्यूनिंग) और सेकंड में परिणाम प्रदान करें।
  • एक खराब डिज़ाइन वाला sql पूरे डेटाबेस ऑपरेशन को धीमा कर सकता है और पूरे ऑपरेशन को रोक सकता है। कार्यात्मक रूप से सही SQL लिखने की तुलना में कुशल SQL लिखना बहुत कठिन है। sql प्रदर्शन ट्यूनिंग सिस्टम के स्वास्थ्य और प्रदर्शन में उल्लेखनीय रूप से सुधार कर सकती है।
  • एसक्यूएल को ट्यून करने की कुंजी परिणाम प्रदान करने के लिए उस डेटा को कम से कम करना है जिसे वह एक्सेस करता है। इष्टतम खोज पथ के माध्यम से परिणाम प्रदान करने के लिए हम उस डेटा को कम कर सकते हैं जिस तक वह पहुंचता है।

एक साधारण उदाहरण होगा

select * from dept where emp=10
  • अब इस क्वेरी को डेटा का पता लगाने के लिए संपूर्ण तालिका विभाग को खोजना होगा जहां emp=10. इसलिए इसे पूरी तालिका तक पहुंचना होगा
  • अब अगर हम इंडेक्स टू एम्प कॉलम बनाते हैं, तो यह सिर्फ इंडेक्स तक पहुंच सकता है और परिणाम प्राप्त कर सकता है। तो यहाँ यह कम डेटा तक पहुँचता है

Oracle में Sql ट्यूनिंग करने के लिए 12 चरण

यहां sql प्रदर्शन ट्यूनिंग की सामान्य युक्तियां दी गई हैं

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

(2) कम डेटा पढ़ें और I/O कुशल बनें।
आप sql स्टेटमेंट के लिए जितना अधिक डेटा पढ़ते हैं, उसे प्राप्त करने के लिए उतने ही अधिक लैच की आवश्यकता होती है और यह प्रदर्शन को धीमा कर देता है। इसलिए इसे हमेशा कम तार्किक पढ़ना चाहिए
समझदार sql स्टेटमेंट लिखें जहां उचित फ़िल्टर हों। शामिल विभिन्न तालिकाओं में पंक्तियों की संख्या के बारे में जाँच करें और sql स्टेटमेंट बनाने की सर्वोत्तम विधि का पता लगाएं

(2) अच्छे ओरेकल इंडेक्स का उपयोग करें
बी-ट्री इंडेक्स और बिटमैप इंडेक्स का उपयोग क्वेरी के प्रदर्शन को बढ़ाने के लिए किया जा सकता है यदि लौटाया गया डेटा 10% से कम है। लेकिन हमें इंडेक्स बनाते समय सावधान रहना चाहिए क्योंकि इसे इन्सर्ट, अपडेट और डिलीट ऑपरेशन के लिए भी बनाए रखने की आवश्यकता होती है। इसलिए एक इंडेक्स बनाना कई चीजों पर ओवरहेड बनाता है। इसलिए हमें सूचकांक बनाने के प्रभाव की सावधानीपूर्वक जांच करनी चाहिए।

(3) sql से बचें जो अनुक्रमणिका के उपयोग को अक्षम करता है

एसक्यूएल जो इंडेक्स को निष्क्रिय करता है
(a)Functions ( to_char(), to_date(), etc. )
फिक्स :फंक्शन को "कॉन्स्टेंट/बाइंड वेरिएबल" साइड में ले जाएं
(b) टाइप कास्टिंग
SQL में
जहां emp_no =10 (emp_no एक varchar2 है)
PL/SQL में
जहां emp_no =v_emp_num (v_emp_num एक संख्या है)
संशोधक
और आईडी + 0 =111
और दिनांक + 1 =sysdate (कोशिश दिनांक =sysdate -1)
ठीक करें:इससे बचने के लिए इसे बदलें


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

(5) यूनियन बनाम या। दो स्पष्ट निष्पादन पथ वाले प्रश्नों के लिए UNION का उपयोग करें; प्रत्येक काफी कम संख्या में पंक्तियों को लौटा रहा है। उन प्रश्नों के लिए संघ का उपयोग न करें जो बड़ी संख्या में पंक्तियों को वापस करने की संभावना रखते हैं क्योंकि सभी पंक्तियों को क्रमबद्ध करने की आवश्यकता होती है और उनमें से अधिकांश को छोड़ दिया जाएगा। OR इंडेक्स को निष्क्रिय कर देता है

(6) इष्टतम योजना प्राप्त करने के लिए तालिका पर सटीक अनुकूलक आँकड़ों का उपयोग करें।

(7) यदि आप शर्त पर अभिव्यक्ति पर फ़ंक्शन का उपयोग कर रहे हैं, तो जांचें कि उस कॉलम पर फ़ंक्शन-आधारित अनुक्रमणिका है या नहीं। यदि यह मौजूद नहीं है तो सूचकांक का उपयोग नहीं किया जाएगा

(8) सहसंबद्ध उपश्रेणियों के लिए मौजूद बनाम इन और गैर मौजूद बनाम नॉट इन का उपयोग करें

(9) खराब कोडिंग प्रथाओं से बचें
कुछ टिप्स
(a) कार्टेशियन जॉइन से बचें। सुनिश्चित करें कि प्रश्नों में आवश्यक सभी तालिकाएं आवश्यक हैं और एक दूसरे से जुड़ी हुई हैं
(b) डेटाबेस में कई यात्राओं से बचने के लिए डिकोड का उपयोग करें
(c) बाहरी जुड़ाव से बचने का प्रयास करें
(d ) कभी-कभी तर्क को छोटे-छोटे हिस्सों में बांटने से काम तेज हो जाता है

(10) यदि जटिल दृश्य का उपयोग करने का प्रयास कर रहे हैं, तो जांचें कि क्या इसके बजाय आधार तालिकाओं का उपयोग किया जा सकता है क्योंकि दृश्य प्रदर्शन को खराब करता है

(11) UNION ALL Vs UNION का उपयोग करें यदि आप जानते हैं कि पुनर्प्राप्त किए गए डेटा में डुप्लिकेट पंक्तियाँ नहीं होंगी

(12) निष्पादन योजना को अनुकूलित करने के लिए संकेतों का प्रयोग करें। कभी-कभी संकेत का उपयोग क्वेरी के लिए निष्पादन योजना को बदलने के लिए किया जा सकता है ताकि सबसे इष्टतम पथ लिया जा सके।
कभी-कभी बाध्यकारी पीकिंग एक खराब योजना बनाती है, इसलिए उस स्थिति में योजना को ठीक करने के लिए आवश्यक संकेत डालने में सहायता मिलती है हर बार अच्छा प्रदर्शन
सबसे आम संकेत हैं
/*+ LEADING (तालिका उपनाम) */ तालिका निर्दिष्ट करता है जिसके द्वारा शामिल होना शुरू करना है
/*+ FIRST_ROWS */ ऑनलाइन के लिए बहुत अच्छा है स्क्रीन - नेस्टेड लूप्स का समर्थन करता है
/*+ INDEX (तालिका उपनाम। इंडेक्स नाम) */ उस इंडेक्स को निर्दिष्ट करता है जिसका आप उपयोग करना चाहते हैं। नोट:यदि अनुक्रमणिका गिरा दी जाती है और फिर से बनाई जाती है और नाम बदल जाता है तो संकेत अब मान्य नहीं है।
/*+ USE_NL (तालिका उपनाम1 तालिका उपनाम 2)*/ अनुकूलक को निर्दिष्ट दो तालिकाओं के लिए नेस्टेड लूप जॉइन का उपयोग करने के लिए कहता है

अनावश्यक अनुकूलक संकेत से बचें और सावधानी से उनका उपयोग करें

मुद्दों से बचने और sql ट्यूनिंग करने के लिए ये कुछ सुझाव हैं। Sql ट्यूनिंग एक बड़ा महासागर है और आप केवल अभ्यास करके ही चीजें सीख सकते हैं। शुभकामनाएँ !!

यह भी पढ़ता है
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल गतिशील स्पूल स्थान के साथ स्पूल का उपयोग कैसे करें

  2. SQLcl (Oracle) में JSON स्वरूपित क्वेरी परिणामों को कैसे सुंदर बनाएं

  3. पीएल/एसक्यूएल का उपयोग करके क्रेडिट कार्ड नंबर की पुष्टि कैसे करें और इसके प्रकार की पहचान कैसे करें?

  4. Oracle DB उद्धरण स्तंभ नाम

  5. JDBC - Oracle ArrayIndexOutOfBoundsException