Oracle समानांतरवाद के बारे में समझने की सबसे महत्वपूर्ण बात यह है कि यह जटिल है। समानांतरवाद को अनुकूलित करने के लिए बहुत सारे Oracle ज्ञान की आवश्यकता होती है, मैनुअल पढ़ना, कई मापदंडों की जाँच करना, लंबे समय से चल रहे प्रश्नों का परीक्षण करना और बहुत अधिक संदेह करना।
सही प्रश्न पूछें
समानांतर समस्याओं में वास्तव में तीन अलग-अलग प्रश्न शामिल होते हैं:
- कितने समानांतर सर्वरों का अनुरोध किया गया था?
- कितने समानांतर सर्वर आवंटित किए गए थे?
- कितने समानांतर सर्वरों का अर्थपूर्ण उपयोग किया गया?
सर्वश्रेष्ठ टूल का उपयोग करें
सबसे अच्छे टूल पर सीधे जाएं - सक्रिय रिपोर्ट के साथ SQL मॉनिटरिंग। अपना SQL_ID ढूंढें और HTML रिपोर्ट जेनरेट करें:select dbms_sqltune.report_sql_monitor(sql_id => 'your_sql_id', type => 'active') from dual;
. निष्पादन योजना में प्रत्येक चरण पर कितना समय व्यतीत हुआ, यह जानने का यही एकमात्र तरीका है। और यह आपको बताएगा कि समानता का कितना प्रभावी ढंग से उपयोग किया गया था, और कहां। उदाहरण के लिए:
एक और अच्छा विकल्प है type => 'text'
. इसमें बहुत अधिक जानकारी नहीं है लेकिन यह देखने में तेज़ और साझा करने में आसान है।
SQL मॉनिटरिंग में अनुरोधित DOP और आवंटित DOP भी शामिल हैं:
एक 100-लाइन समानांतर select
खूबसूरती से चल सकता है, लेकिन फिर सब कुछ एक ही कदम पर रुक जाता है क्योंकि एक अनछुए अनुक्रम के कारण। आप एक व्याख्या योजना, एक ट्रेस, या एक AWR रिपोर्ट को घंटों तक देख सकते हैं और समस्या नहीं देख सकते हैं। सक्रिय रिपोर्ट धीमे चरणों को खोजने के लिए लगभग तुच्छ बनाती है। यह अनुमान लगाने में समय बर्बाद न करें कि समस्या कहाँ है।
हालाँकि, अन्य उपकरणों की अभी भी आवश्यकता है। explain plan for ...
. के साथ उत्पन्न एक व्याख्या योजना और select * from table(dbms_xplan.display)
; कुछ महत्वपूर्ण जानकारी प्रदान करेगा। विशेष रूप से Notes
अनुभाग में कई कारण शामिल हो सकते हैं कि क्वेरी ने समानता का अनुरोध क्यों नहीं किया।
लेकिन मुझे इतने समानांतर सर्वर क्यों मिले?
प्रासंगिक जानकारी कई अलग-अलग मैनुअल में फैली हुई है, जो बहुत उपयोगी हैं लेकिन कभी-कभी गलत या भ्रामक होती हैं। समानता के बारे में कई मिथक और बहुत बुरी सलाह हैं। और तकनीक प्रत्येक रिलीज़ के साथ महत्वपूर्ण रूप से बदलती है।
जब आप सभी प्रतिष्ठित स्रोतों को एक साथ रखते हैं, तो समानांतर सर्वरों की संख्या को प्रभावित करने वाले कारकों की सूची आश्चर्यजनक रूप से बड़ी होती है। नीचे दी गई सूची मोटे तौर पर मेरे विचार से सबसे महत्वपूर्ण कारक हैं:
- इंटर-ऑपरेशन समानांतरवाद सॉर्टिंग या ग्रुपिंग का उपयोग करने वाली कोई भी क्वेरी डीओपी के रूप में दोगुने समानांतर सर्वर आवंटित करेगी। यह संभवतः इस मिथक के लिए ज़िम्मेदार है "Oracle जितना संभव हो उतने समानांतर सर्वर आवंटित करता है!"।
- क्वेरी संकेत अधिमानतः एक कथन-स्तरीय संकेत जैसे
/*+ parallel */
, या संभवतः एक वस्तु-स्तरीय संकेत जैसे/*+ noparallel(table1) */
. यदि किसी योजना का कोई विशिष्ट चरण क्रमिक रूप से चल रहा है तो यह आमतौर पर क्वेरी के केवल एक भाग पर वस्तु-स्तर के संकेतों के कारण होता है। - पुनरावर्ती SQL कुछ ऑपरेशन समानांतर में चल सकते हैं लेकिन पुनरावर्ती SQL द्वारा प्रभावी ढंग से क्रमबद्ध किए जा सकते हैं। उदाहरण के लिए, एक बड़े इंसर्ट पर एक कैश न किया गया अनुक्रम। बयान को पार्स करने के लिए उत्पन्न रिकर्सिव एसक्यूएल भी सीरियल होगा; उदाहरण के लिए डायनामिक सैंपलिंग क्वेरीज़।
- सत्र बदलें
alter session [force|enable] parallel [query|dml|ddl];
ध्यान दें कि समानांतर डीएमएल डिफ़ॉल्ट रूप से अक्षम है। - टेबल डिग्री
- सूचकांक डिग्री
- सूचकांक सस्ता था समानांतर संकेत केवल अनुकूलक को एक निश्चित डीओपी के साथ एक पूर्ण तालिका स्कैन पर विचार करने के लिए कहते हैं। वे वास्तव में समानता को बल नहीं देते हैं। ऑप्टिमाइज़र अभी भी सीरियल इंडेक्स-एक्सेस का उपयोग करने के लिए स्वतंत्र है यदि उसे लगता है कि यह सस्ता है। (
FULL
संकेत इस समस्या को हल करने में मदद कर सकते हैं।) - योजना प्रबंधन एसक्यूएल प्लान बेसलाइन, रूपरेखा, प्रोफाइल, उन्नत पुनर्लेखन, और एसक्यूएल अनुवादक सभी आपकी पीठ के पीछे समानता की डिग्री बदल सकते हैं। योजना का नोट अनुभाग देखें।
- संस्करण केवल एंटरप्राइज़ और व्यक्तिगत संस्करण समानांतर संचालन की अनुमति देते हैं। पैकेज DBMS_PARALLEL_EXECUTE को छोड़कर।
- PARALLEL_ADAPTIVE_MULTI_USER
- PARALLEL_AUTOMATIC_TUNING
- PARALLEL_DEGREE_LIMIT
- PARALLEL_DEGREE_POLICY
- PARALLEL_FORCE_LOCAL
- PARALLEL_INSTANCE_GROUP
- PARALLEL_IO_CAP_ENABLED
- PARALLEL_MAX_SERVERS यह पूरे सिस्टम के लिए ऊपरी सीमा है। यहां एक ट्रेड-ऑफ है। एक साथ कई समानांतर सर्वर चलाना सिस्टम के लिए खराब है। लेकिन किसी क्वेरी को सीरियल में डाउनग्रेड करना कुछ प्रश्नों के लिए विनाशकारी हो सकता है।
- PARALLEL_MIN_PERCENT
- PARALLEL_MIN_SERVERS
- PARALLEL_MIN_TIME_THRESHOLD
- PARALLEL_SERVERS_TARGET
- PARALLEL_THREADS_PER_CPU
- आरएसी नोड्स की संख्या डिफ़ॉल्ट डीओपी के लिए एक और गुणक।
- CPU_COUNT यदि डिफ़ॉल्ट डीओपी का उपयोग किया जाता है।
- RECOVERY_PARALLELISM
- FAST_START_PARALLEL_ROLLBACK
- प्रोफ़ाइल
SESSIONS_PER_USER
समानांतर सर्वर को भी सीमित करता है। - संसाधन प्रबंधक
- सिस्टम लोड यदि समानांतर_अनुकूली_मल्टी_यूसर सत्य है। यह अनुमान लगाना शायद असंभव है कि Oracle कब थ्रॉटलिंग शुरू करेगा।
- प्रक्रियाएं
- समानांतर डीएमएल प्रतिबंध समानांतर डीएमएल काम नहीं करेगा यदि इनमें से कोई भी मामला:
- संगत <9.2 अंतर-विभाजन के लिए
- मान डालें, ट्रिगर वाली तालिकाएं
- प्रतिकृति
- सेल्फ़-रेफ़रेंशियल अखंडता या कैस्केड या आस्थगित अखंडता बाधाओं को हटाएं
- ऑब्जेक्ट कॉलम एक्सेस करना
- LOB के साथ गैर-विभाजित तालिका
- एक LOB के साथ अंतर-विभाजन समांतरता
- वितरित लेनदेन
- क्लस्टर टेबल
- अस्थायी टेबल
- स्केलर सबक्वेरी समानांतर में नहीं चलती हैं? यह मैनुअल में है, और मेरी इच्छा है कि यह था सच है, लेकिन मेरे परीक्षणों से संकेत मिलता है कि समांतरता यहां 11g में काम करती है।
- ENQUEUE_RESOURCES 10g में छिपा हुआ पैरामीटर, क्या यह अब प्रासंगिक है?
- सूचकांक-संगठित तालिकाएं समानांतर में IOTs को डायरेक्ट-पाथ इंसर्ट नहीं कर सकता? (क्या यह अभी भी सच है?)
- समानांतर पाइपलाइन की गई फ़ंक्शन आवश्यकताएं एक
CURSOR
का उपयोग करना चाहिए (?) TODO. - कार्य PARALLEL_ENABLE होना चाहिए
- कथन का प्रकार पुराने संस्करणों ने विभाजन के आधार पर डीएमएल पर समानता को प्रतिबंधित कर दिया। कुछ मौजूदा मैनुअल में अभी भी यह शामिल है लेकिन यह निश्चित रूप से अब सच नहीं है।
- विभाजनों की संख्या केवल पुराने संस्करणों में विभाजन-वार जॉइन के लिए।(?)
- बग विशेष रूप से मैंने पार्सिंग के साथ बहुत सी बग देखी हैं। Oracle समानांतर सर्वरों की सही संख्या आवंटित करेगा लेकिन कुछ नहीं होगा क्योंकि वे सभी
cursor: pin s wait on x
जैसी घटनाओं की प्रतीक्षा करते हैं। ।
यह सूची निश्चित रूप से पूर्ण नहीं है, और इसमें 12c सुविधाएँ शामिल नहीं हैं। और यह ऑपरेटिंग सिस्टम और हार्डवेयर मुद्दों को संबोधित नहीं करता है। और यह भयानक रूप से कठिन प्रश्न का उत्तर नहीं देता है, "समानांतरता की सर्वोत्तम डिग्री क्या है?" (संक्षिप्त उत्तर:अधिक आमतौर पर बेहतर होता है, लेकिन अन्य प्रक्रियाओं की कीमत पर।) उम्मीद है कि यह कम से कम आपको यह एहसास दिलाएगा कि ये समस्याएं कितनी कठिन हो सकती हैं, और तलाश शुरू करने के लिए एक अच्छी जगह है।