कभी-कभी पारंपरिक ज्ञान इतना पारंपरिक या सामान्य नहीं होता है। केस-इन-पॉइंट डीबीए यह मान सकता है कि स्ट्रीम पूल स्ट्रीम प्रक्रियाओं के लिए सख्ती से आरक्षित है। ऐसा नहीं है क्योंकि अन्य Oracle उपयोगिताओं, जैसे डेटा पंप और गोल्डनगेट, उस पूल का उपयोग करते हैं। बेशक गतिशील प्रबंधन का उपयोग करने का विकल्प मांग किए जाने पर स्वचालित रूप से आवश्यक स्मृति आवंटित करेगा, हालांकि वह स्मृति कहीं से आनी चाहिए। ओरेकल बफर कैश से जो कुछ भी चाहता है उसे 'चोरी' करेगा, और इसे तुरंत बदला नहीं जाएगा। आइए डेटा पंप का उपयोग करके इसे साबित करने वाले एक उदाहरण को देखें।
'पीड़ित' एक Oracle 12.1.0.2 डेटाबेस होगा जिसे स्ट्रीम_पूल_साइज़ 0 पर सेट के साथ कॉन्फ़िगर किया गया है (चूंकि स्ट्रीम कॉन्फ़िगर नहीं है, उम्मीद है कि पूल का उपयोग नहीं किया जाएगा) और स्वचालित साझा मेमोरी प्रबंधन कॉन्फ़िगर किया गया है (sga_target और sga_max_size पैरामीटर हैं गैर-शून्य मानों पर सेट करें):
SQL> --SQL> -- स्ट्रीम पूल केवल SQL के लिए नहीं है> -- StreamsSQL> --SQL> -- डेटा पंप और GoldenGate दोनों ही SQL का उपयोग करते हैं> -- itSQL> --SQL> -- आकार निर्धारित नहीं कर रहे हैं धाराओं के लिएएसक्यूएल> - पूल समस्या पैदा कर सकता है जब यह एसक्यूएल> - पहली बार इस्तेमाल किया गया एसक्यूएल> - एसक्यूएल> - एसक्यूएल> - डेटाबेस मापदंडों को देखते हुए एसक्यूएल> - एसजीए मापदंडों की जांच करेंएसक्यूएल> - आकार देने के लिएएसक्यूएल> -एसक्यूएल> पैरामीटर दिखाएं sgaNAME TYPE VALUE------------------------------------- -------- ------------------------lock_sga बूलियन FALSEpre_page_sga बूलियन TRUEsga_max_size बड़ा पूर्णांक 600Msga_target बड़ा पूर्णांक 600Munified_audit_sga_queue_size पूर्णांक 1048576
गैर-शून्य वर्तमान आकार वाले घटकों के लिए V$SGA_DYNAMIC_COMPONENTS दृश्य की जाँच करने पर निम्नलिखित परिणाम प्राप्त होते हैं:
एसक्यूएल>एसक्यूएल>स्तंभ घटक प्रारूप ए29एसक्यूएल>सेट लाइनसाइज 300 numwidth 12एसक्यूएल>एसक्यूएल> चयन घटक, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 v$sga_dynamic_components 4 से जहां current_size_components 4> 0;घटक CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE----------------------------- -------- ---------------------------------------------------------- -------------------------------------साझा पूल 176160768 146800640 176160768 0 6 आस्थगित वृद्धि 15-अक्टूबर-19 4194304बड़ा पूल 8388608 8388608 125829120 0 1 आस्थगित 15-अक्टूबर-19 4194304जावा पूल 4194304 4194304 4194304 0 0 स्थिर 4194304 डिफ़ॉल्ट बफर कैशयह सत्यापित करना कि streams_pool_size 0 पर सेट है:
SQL> SQL> --SQL> -- सत्यापित करें कि स्ट्रीम पूल SQL पर सेट है> -- 0SQL> --SQL> पैरामीटर स्ट्रीम दिखाएंनाम प्रकार VALUE---------------- --------------------------------------------- -----------streams_pool_size बड़ा पूर्णांक 0SQL>एक डेटा पंप निर्यात निष्पादित किया जाता है और बाद में, आकार के लिए गतिशील स्मृति घटकों की जांच की जाती है:
SQL> SQL> --SQL> -- एक डेटा पंप निर्यात कार्य चलाएँSQL> -- और देखें कि स्ट्रीम का क्या होता हैSQL> -- पूल sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> कॉलम घटक प्रारूप a29SQL> सेट लाइनसाइज़ 300 numwidth 12SQL> SQL> घटक का चयन करें, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 v$sga_dynamic_components 4 से जहां current_SIZE MIN_CURRENT> 0; OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE ---------------------------------------------------------- ---------------------------------साझा पूल 197132288 146800640 197132288 0 11 तत्काल 15-अक्टूबर- 19 4194304बड़ा पूल 8388608 8388608 125829120 0 1 आस्थगित हटना 15-अक्टूबर-19 4194304जावा पूल 4194304 4194304 4194304 0 0 स्टेटिक 4194304स्ट्रीम पूल 8388608 0 8388608 0 2 तत्काल बढ़ाएँ 15-अक्टूबर-19 4194304डीफॉल्ट बफर कैश 381681664 301989888 419430400 0 15 209715 015 1 साझा IO 419430420 0 209715 015 1 साझा करें ग्रो इमीडिएट 15-अक्टूबर-19 41943046 पंक्तियाँ चुनी गईं। SQL>ध्यान दें कि DEFAULT बफर कैश का आकार 411041792 की प्रारंभिक सेटिंग से घटाकर 381681664 कर दिया गया था, आंशिक रूप से स्ट्रीम पूल को 'फंड' करने में मदद करने के लिए। उस विचार का परीक्षण करना streams_pool_size 8M पर सेट है (मान Oracle इसे गतिशील रूप से सेट करता है) और, परीक्षणों को यथासंभव समान बनाने के लिए, डेटाबेस को बंद कर दिया जाता है और शुरू कर दिया जाता है:
SQL> SQL> --SQL> -- streams_pool_size को currentSQL पर सेट करें> -- valueSQL> --SQL> -- शटडाउन और डेटाबेस को स्टार्टअप करेंSQL> --SQL> सिस्टम सेट को बदल देंstreams_pool_size=8M स्कोप=spfile; सिस्टम में बदलाव किया गया। पूर्व>प्रारंभिक मानों के लिए जाँचे गए डायनामिक मेमोरी पैरामीटर:
एसक्यूएल> एसक्यूएल> --एसक्यूएल> - एसजीए घटकों के गतिशील आकार की जांच करेंएसक्यूएल> -एसक्यूएल> कॉलम घटक प्रारूप ए29एसक्यूएल> सेट लाइनसाइज 300 न्यूमविड्थ 12एसक्यूएल> एसक्यूएल> घटक का चयन करें, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 v$sga_dynamic_components 4 से जहां current_size> 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OSIPER_COUNT LAST_OPER_TYP_--------------------- GRANULE_OPER LAST_OPER LAST_OPER GRANULE ---------------------------------------------------------- --------------------------------------------------------- ------------ साझा पूल 155189248 146800640 155189248 0 2 तत्काल 15-अक्टूबर -19 4194304 बड़ा पूल 125829120 125829120 125829120 0 0 स्टेटिक 4194304जावा पूल 4194304 4194304 419430 4 0 0 स्टेटिक 4194304स्ट्रीम पूल 8388608 8388608 8388608 8388608 0 स्टेटिक 4194304DEFAULT बफर कैश 327155712 327155712 335544320 0 2 तत्काल 15-OCT-19 4194304SQL> SQL> --SQL> - पिछली डंप फ़ाइल को हटा देंSQL> --SQL> !/bin /rm /u01/app/oracle/admin/orcl/dpdump/scott.*समायोजित मेमोरी पूल सेटिंग्स के साथ डेटा पंप कार्य फिर से चलाएँ:
SQL> SQL> --SQL> -- एक डेटा पंप निर्यात कार्य चलाएँSQL> -- और देखें कि स्ट्रीम का क्या होता हैSQL> -- पूल sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> कॉलम घटक प्रारूप a29SQL> सेट लाइनसाइज़ 300 numwidth 12SQL> SQL> घटक का चयन करें, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 v$sga_dynamic_components 4 से जहां current_SIZE MIN_CURRENT> 0; OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE ---------------------------------------------------------- ---------------------------------साझा पूल 197132288 146800640 197132288 0 12 तत्काल 15-अक्टूबर- 19 4194304बड़ा पूल 8388608 8388608 125829120 0 1 आस्थगित हटना 15-अक्टूबर-19 4194304जावा पूल 4194304 4194304 4194304 0 0 स्टेटिक 4194304स्ट्रीम पूल 8388608 8388608 8388608 8388608 0 स्टेटिक 4194304डीफॉल्ट बफर कैश 381681664 264241152 381681664 0 14 ग्रोव 1 डिफर्ड 15-अक्टूबर-19 41 15941520 0 एमई 19 41943046 पंक्तियाँ चुनी गईं। SQL>ध्यान दें कि डिफ़ॉल्ट बफ़र कैश बढ़ा दिया गया था, पूर्व उदाहरण की तरह कम नहीं किया गया था। बफर कैश से कोई मेमोरी 'चोरी' नहीं हुई थी, इसलिए प्रदर्शन संसाधनों के गतिशील स्थानांतरण से प्रभावित नहीं हुआ। स्ट्रीम्स_पूल_साइज़ को 0 पर सेट करने के साथ एक संभावित समस्या स्ट्रीम पूल आवंटित किए जाने के समय प्रदर्शन में गिरावट हो सकती है क्योंकि बफर कैश उसी समय सिकुड़ रहा था जब स्ट्रीम पूल बढ़ रहा था। यह उन प्रणालियों में विशेष रूप से ध्यान देने योग्य हो सकता है जहां उपयोगकर्ता लोड शुरू में काफी भारी होता है।
जैसा कि पहले उल्लेख किया गया है, गोल्डनगेट भी स्ट्रीम पूल का उपयोग करता है और, एक निकालने की प्रक्रिया शुरू होने पर भारी प्रतिबद्ध गतिविधि के कारण, सेवा में संभावित रूप से खतरनाक गिरावट प्रदर्शित कर सकता है जो तब तक रहता है जब तक कि निकालने की प्रक्रिया अपनी स्टार्टअप गतिविधियों को समाप्त नहीं कर लेती। [गोल्डनगेट द्वारा उत्पन्न अन्य प्रक्रियाएं मंदी में योगदान करती हैं जैसे कि एक वैश्विक लॉग फ़ाइल सिंक, फिर से लॉग में प्रतिबद्ध डेटा फ्लश करने के लिए।] एक सिस्टम को इतनी बुरी तरह से नुकसान हुआ है जब एक निकालने की प्रक्रिया शुरू की गई थी कि ऑपरेटिंग सिस्टम लॉगिन आवंटित में पूरा करने में असमर्थ थे। समय, तृतीय-पक्ष निगरानी सॉफ़्टवेयर को रिपोर्ट करने के लिए कि उस सर्वर पर चल रहे डेटाबेस अब उपलब्ध नहीं थे। स्ट्रीम_पूल_साइज़ को गैर-शून्य मान पर सेट करने से एक्सट्रेक्ट प्रक्रिया शुरू होने पर समग्र प्रदर्शन में सुधार करने में बहुत योगदान मिला।
सामान्य ज्ञान दोधारी तलवार हो सकता है; प्रत्येक मामले के लिए जहां सामान्य ज्ञान सत्य होता है, वहां एक या अधिक मामले हो सकते हैं जहां यह नहीं होता है। इस तरह के 'ज्ञान' की सटीकता को सत्यापित करने के लिए इसका परीक्षण करना ही एकमात्र वास्तविक समाधान है। इस तरह की जांच के साथ एक परीक्षण, विकास या 'सैंडबॉक्स' प्रणाली को प्रभावित करना कहीं बेहतर है कि इस तरह के 'ज्ञान' को 'सुसमाचार' के रूप में लेने के बजाय केवल उन धारणाओं की खोज करें जिन पर 'ज्ञान' आधारित था। अनुमान लगाने से जानना बेहतर है; जब Oracle से जुड़ी एक नई प्रक्रिया को लागू करने का समय आता है, तो जांच के साथ बिताया गया थोड़ा समय भारी लाभ प्राप्त कर सकता है।
# # #
डेविड फिट्ज़जारेल के लेख देखें