मेमोरी ट्यूनिंग फ्री मेमोरी को Oracle मेमोरी घटकों में वितरित या पुनः आवंटित करती है। यह मुख्य रूप से Oracle क्वेरी पर परफॉरमेंस ट्यूनिंग के लिए उपयोग की जाती है।
आजकल, हर क्लाइंट के लिए एक प्रमुख मुद्दा डेटाबेस परफॉरमेंस से संबंधित है। यह ब्लॉग बताता है कि डेटाबेस में मेमोरी कैसे ट्यून करें जिसके परिणामस्वरूप डेटाबेस में हाई परफॉरमेंस प्राप्त होती है। विभिन्न प्रकार की मेमोरी ट्यूनिंग विधियां उपलब्ध हैं: OS लेवल प्रोसेस ट्यूनिंग, CPU ट्यूनिंग, RAM ट्यूनिंग, डेटाबेस ट्यूनिंग आदि। इस ब्लॉग में मैं डेटाबेस में मेमोरी ट्यूनिंग पर चर्चा करूंगा।
डेटाबेस मेमोरी ट्यूनिंग:
डेटाबेस के लिए मेमोरी ट्यूनिंग System Global Area (SGA) को ट्यून करने के अलावा कुछ नहीं है। SGA ट्यूनिंग के संबंध में प्रमुख घटकों की सूची निम्नलिखित है। आइए इनमें से प्रत्येक घटक को विस्तार से देखें:
- Keep Pool
- Default Pool, Recycle Pool, Stream Pool
- DB Buffer Cache: फ्री बफर, मॉडिफाइड बफर, पिन्ड बफर
- Shared Pool
Keep Pool:
कुछ पैकेज हैं जिनका दैनिक उपयोग किया जाता है। परफॉरमेंस बढ़ाने के लिए, आपको उन पैकेज को SGA में रखने की आवश्यकता है। प्रोसीजर की मदद से, आप उस पैकेज को कीप पूल में रख सकते हैं। यदि SGA को आवंटित स्पेस शटडाउन हो जाता है, तो SGA को RAM में फिर से आवंटित करना होगा, उस समय कीप पूल में पैकेज रखने के बावजूद, यह फ्लश हो जाएगा। अगली बार जब आप रीस्टार्ट करेंगे और उस पैकेज को निष्पादित करेंगे, तो पैकेज डेटाबेस शटडाउन होने तक कीप पूल में रहेगा। ऐसा करके हम I/O को कम करते हैं।
हिट रेशियो की मदद से, आप यह सुनिश्चित कर सकते हैं कि पार्स कोड एक्जीक्यूशन प्लान लाइब्रेरी कैश से फ्लश हो रहे हैं। लाइब्रेरी कैश के लिए हिट रेशियो > 85% होना चाहिए।
Stream Pool का उपयोग डेटा पंप के लिए बफर बनाने के लिए किया जाता है। दैनिक रूप से, कुछ टेबल्स (छोटी टेबल्स) परफॉरमेंस बढ़ाने के लिए उपयोग की जाती हैं। उन टेबल्स को SGA (कीप पूल) में रखना बेहतर है। यह परफॉरमेंस बढ़ाएगा जहां आप डिस्क से नहीं बल्कि मेमोरी से ही डेटा ला रहे हैं। बड़ी टेबल्स के लिए हमारे पास रिसाइकल पूल है
डिफ़ॉल्ट रूप से, जब भी हम उन टेबल्स (छोटी टेबल्स) को ब्लॉक्स के रूप में चुनते हैं, तो डेटा बफर कैश में लाया जाता है और डिफ़ॉल्ट पूल में रखा जाता है। यह डिफ़ॉल्ट पूल एक बार अन्य टेबल्स चुनने पर फ्लश हो जाता है। यदि बफर में स्पेस है तो ठीक है, यदि नहीं, तो यह नई टेबल्स को समायोजित करने के लिए पिछली टेबल्स को फ्लश कर देगा। परफॉरमेंस बढ़ाने के लिए, छोटी टेबल्स को डिफ़ॉल्ट पूल के बजाय कीप पूल में रखें। डेटा बफर कैश के लिए हिट रेशियो > 95% होना चाहिए। यदि यह 95% से कम है तो हमें डेटाबेस बफर कैश को रीसाइज करने की आवश्यकता है।
मेमोरी ट्यूनिंग का मुख्य हिस्सा डेटाबेस बफर कैश और शेयर्ड पूल है, जो मेमोरी में पर्याप्त डेटा बनाए रखने के लिए उपयोगी है। हर किसी को SGA ट्यूनिंग के लिए डेटाबेस बफर कैश में बुनियादी ऑपरेशन पता होने चाहिए। ब्लॉग के अंत में, मैं मेमोरी ट्यून करने के लिए हिट रेशियो की गणना करने के लिए कुछ सैंपल SQL क्वेरी उदाहरण साझा करूंगा।
फ्री बफर्स
मॉडिफाइड डेटा फेच्ड ब्लॉक्स का उपयोग करता है और डेटा बदलने से पहले डेटा बफर कैश में कॉपी करता है। इन बफर्स को फ्री बफर्स कहा जाता है। नीचे दी गई इमेज से, डिस्क का मान 1000 या मेमोरी का मान 1000 समान हैं। नीचे दी गई इमेज फ्री बफर दिखाती है:
मॉडिफाइड बफर्स
मॉडिफाइड बफर्स को डर्टी बफर्स भी कहा जाता है। डिस्क में इमेज और डेटा के डेटा बफर कैश में इमेज बदल दी गई है, लेकिन ये बफर्स या डेटा अभी तक डिस्क पर नहीं लिखे गए हैं। इन बफर्स को डर्टी बफर्स कहा जाता है।
निम्नलिखित इमेज मॉडिफाइड बफर दिखाती है:
पिन्ड बफर्स
DB बफर कैश में डेटा हर बार बदलता रहता है। सर्वर प्रोसेस आगे के ट्रांजैक्शन के लिए इन मॉडिफाइड डेटा को चुनेगा। यह चुना गया डेटा पिन्ड डेटा या बफर के अलावा कुछ नहीं है।
फिजिकल रीड्स: Oracle डेटा ब्लॉक्स जो Oracle I/O करके डिस्क से पढ़ता है।
लॉजिकल रीड्स: यदि Oracle डेटाबेस बफर कैश से डेटा पढ़कर अनुरोध को संतुष्ट कर सकता है तो यह लॉजिकल रीड्स के अंतर्गत आता है।
DB ब्लॉक गेट्स: जब Oracle डेटाबेस बफर कैश में आवश्यक डेटा ढूंढता है, तो Oracle जांचता है कि डेटा कमिटेड है या नहीं, यदि कमिटेड है तो बफर्स से लाता है। इन बफर्स को DB बफर गेट्स के रूप में भी जाना जाता है।
कंसिस्टेंट रीड्स: डेटाबेस बफर कैश में, जो ब्लॉक्स मौजूद हैं, मॉडिफाइड लेकिन कमिटेड नहीं हैं। इसलिए, डेटा UNDO डेटाफाइल से लाया जाना चाहिए।
db_buffer_cache का लक्ष्य लॉजिकल रीड्स बढ़ाना है।
सॉफ्ट पार्सिंग: यदि हमारे पास लाइब्रेरी कैश में पहले से एक्जीक्यूशन प्लान उपलब्ध है, तो यह डिस्क पर नहीं जाएगा, यह मौजूदा एक्जीक्यूशन प्लान से पार्स प्लान (पार्स कोड) बनाएगा। इसे सॉफ्ट पार्स कहा जाता है।
हार्ड पार्सिंग: पार्स कोड बनाने के लिए, यह जांचेगा कि कोई एक्जीक्यूशन प्लान उपलब्ध है या नहीं, यदि एक्जीक्यूशन प्लान उपलब्ध है तो यह सॉफ्ट पार्स के साथ जाता है। यदि एक्जीक्यूशन प्लान उपलब्ध नहीं है, तो यह हार्ड पार्स करता है जिसका अर्थ है कि यह डिस्क पर जाता है।
शेयर्ड पूल: शेयर्ड पूल लाइब्रेरी कैश और डेटा डिक्शनरी कैश का संयोजन है।
लाइब्रेरी कैश: लाइब्रेरी कैश का लक्ष्य सॉफ्ट पार्सिंग बढ़ाना है
लक्ष्य प्राप्त करने के तरीके:
- बाइंड वेरिएबल्स का उपयोग करना
- स्टोर्ड प्रोसीजर लिखकर
- हिट रेशियो (यदि > 85% नहीं है तो शेयर्ड पूल साइज बढ़ाएं)
- DBMS_Shared_pool (पैकेज) हिट रेशियो SQL क्वेरी का उपयोग करके मेमोरी ट्यूनिंग में प्रमुख भूमिका निभाता है।
डेटा डिक्शनरी कैश: इसे रो कैश भी कहा जाता है। डेटा डिक्शनरी कैश हिट रेशियो >85% होना चाहिए, यदि नहीं तो शेयर्ड पूल साइज बढ़ाएं।
हिट रेशियो की गणना के लिए सैंपल क्वेरी निम्नलिखित हैं।
select (sum(pinhits)/sum(pins))*100 as lchitratio from v$librarycache;
select namespace, pins, pinhits, reloads from v$librarycache order by namespace;
dbms_Shared_pool का पैकेज प्राप्त करने के लिए @$ORACLE_HOME/rdbms/admin/dbmspool.sql चलाएं
select namespace, kept, locks, executions from v$db_object_cache where type like '%PROC%';
डेटा डिक्शनरी कैश हिट रेशियो:
select (sum(gets-getmisses-fixed))/sun(gets) as "ddchitratio" from v$rowcache;
रेडो लॉग बफर कैश:
select name, value from v$sysstat where name like 'redo%';
मुझे आशा है कि आपको ऊपर चर्चा किए गए बिंदु उपयोगी लगेंगे और अब आप आसानी से डेटाबेस में मेमोरी ट्यून कर सकते हैं।