Oracle Memory Architecture: Oracle Database को हम Database व Instance दो रूपों में देख सकते हैं। Technically एक Oracle Database उन Files का एक Physical Collection होता है, जो Database में Exist होते हैं। लेकिन स्वयं Database अपने स्तर पर कुछ नहीं होता है, क्योंकि Database से Directly Interact करने का User के पास कोई तरीका नहीं होता है। जबकि Instance Oracle का एक Running Database होता है, जिसमें Memory Structure होता है और Associated Process होते हैं, जो इन Memory Structures से Interact होते हैं व Memory Structures को Manipulate करते हैं।
जो लोग Oracle, Relational Database Management Systems (RDBMS) पर काम करते हैं, वे अक्सर Instance व Database को Interchangeably Use करते हैं। इन दोनों के बीच का मुख्य अन्तर ये है कि एक Physical Database File से कई Instances Connect हो सकते हैं।
जब किसी Oracle Instance को Start करने के लिए कोई Script Run होता है, तब विभिन्न प्रकार के Processes को Start करने के लिए Oracle उन्हें Required Memory Space Allocate करता है। इस तरीके में हमारे पास एक ही Server पर एक से ज्यादा Database Instance हो सकते हैं, जो कि एक दूसरे से स्वतंत्र रूप से Run होते हैं। Oracle Parallel Server में Same Single Data Files के समूह के साथ एक से ज्यादा Instances Mount हो सकते हैं।
Oracle को समझने के लिए हमें Memory, Server Processes व Data Files तीनों Concepts को समझना होता है। इस Post में हम Oracle के Memory Structure को समझेंगे जबकि Server Processes व Data Files के बारे में हम अलग Article में जानेंगे।
Memory Structures
System Global Area (SGA) जिसे कई बार Shared Global Area भी कहते हैं, Oracle का Main Memory Component होता है। Oracle एक Memory Based Database है, जिसका मतलब ये है कि Data, Locks व अन्य Elements Memory में Hold होते हैं। SGA की Size कभी भी Server Machine की Physical Available Memory से ज्यादा नहीं होती है, अन्यथा Virtual Memory Paging होने लगता है, जिससे Oracle Database की Performance कम हो जाती है।
यानी जब किसी Computer में ज्यादा Physical Memory नहीं होती है, तब बडे Programs व बहुत सारे Programs को एक साथ चलाने के लिए Operating System में Virtual memory Model को Use किया जाता है। इस Model में जो Application Program Active होता है, उसके Data तो Main Memory में रहते हैं और जो Program Inactive होते हैं, उन्हें Hard Disk पर भेज दिया जाता है।
Hard Disk में जितना Free Space होता है, उसे Operating System द्वारा Virtual Memory की तरह Use कर लिया जाता है। Main Memory में जो भी Application Store होता है, वह Memory के विभिन्न हिस्सों में Store होता है। Memory के विभिन्न हिस्सों को Page कहा जाता है और Main Memory के Data को Disk की Virtual Memory में भेजने की प्रक्रिया को Paging कहा जाता है।सामान्यतया Memory Pages की Size 4KB या 8KB होती है।
पहले जो Operating Systems बने थे, उनमें पूरे Application को ही Virtual Memory में भेज दिया जाता था। इस प्रक्रिया को Swapping कहा जाता था। इसलिए आज के नए Operating System में भी जिस File के Data को Main Memory से Virtual Memory में भेजा जाता है, उसे Swap File ही कहते हैं।
Oracle के System Global Area (SGA) Memory में निम्न Components होते हैं:
- Database Buffer Cache
- Redo Log Buffer
- Shared Pool Area (Which is made up of the following components:
- Library Cache (Which includes a Shared SQL Area)
- Data Dictionary Cache (also known as the Row Cache)
जब कोई Oracle Instance Start होता है, तब Oracle उसके SGA को Memory Allocate करता है। Oracle स्वयं ही इसके विभिन्न Components की Memory को Manage करता है और तब तक किसी भी Component की Memory को Release नहीं करता है, जब तक कि Oracle के उस Instance को Shut Down नहीं कर दिया जाता। साथ ही Allocate की जाने वाली Memory Dynamically Increase नहीं होती है। Memory Allocation को Change करने के लिए, हमें Oracle के Instance को Shut Down करना पडता है, उसके बाद Initialization Parameters में Change करना होता है और फिर से Oracle के Instance को Start करना होता है।
The Database Buffer Cache
ये SGA की Memory का वह हिस्सा होता है, जहां Database की किसी Data File से Read किया गया Data Store होता है। यही Data किसी Visual Basic या Java जैसे Client Application द्वारा Access होता है। ये Cache Buffers से बनता है, जिसकी Individual Size उस Physical Database Files के किसी Database Block के बराबर होती है, जिसमें Data को Manage किया जा रहा होता है। यदि इस Memory में कोई Data ना हो, तो User के Client Application की Request पर Generate होने वाला Data इसी Buffer में Store होता है। जब हम Database से Connect होते हैं, तब Oracle एक Server Process Create करता है, जिसे Shadow Process भी कहते हैं। ये Process Application की Request को हमारी जरूरत के आधार पर Handle करता है।
Cache में दो Lists होती हैं जो Buffer को Manage करती है: जिन्हें Least Recently Used (LRU) List व Dirty List कहते है। Least Recently Used List सबसे ज्यादा महत्वपूर्ण होती है। SELECT जैसे किसी Command से जितनी बार भी Data Buffer Access होता है, ये Data इस List के Top पर पहुंच जाता है। जबकि जो Buffer Access नहीं होता है, वह इस List के Bottom में Move हो जाता है। इस List में हमेंशा अन्तिम बार Access किया गया Data Stored रहता है। इस Buffer को Create करने का मुख्य Purpose ये होता है कि किसी Data के लिए Physical Disk Reading Operation को कम किया जा सके।
Oracle का दूसरा List उन Data Buffers की जानकारी को Hold करता है, जिन्हें Change किया गया है। जब भी Client Application किसी ऐसे Data की Request करता है, जो कि Database Buffer Cache में नहीं होता है, तो Oracle LRU List को Free Buffer के लिए Search करता है। यदि Search के दौरान Dirty List Buffer प्राप्त होता है, तो Server Process उन्हें Dirty List में Move कर देता है। जब कुछ निश्चित संख्या में Buffers को Scan कर लिया जाता है और कोई भी Free Buffer प्राप्त नहीं होता है, तो Database Writer Process (DBWR) कुछ Dirty Buffers को Disk पर Write करता है, जो उन्हें Free कर देते हैं। वे Buffers जो कि Dirty नहीं होते हैं, वे किसी भी समय List से Move Out हो सकते हैं और वे Buffers जो कि LRU List में Bottom पर होते हैं, वे सबसे पहले Free हो सकते हैं।
Redo Log Buffer
Redo Log Buffer Memory का वह Area होता है, जो Database में किए जाने वाले सभी General Changes को Hold करता है। Database में किए जाने वाले विभिन्न Changes को Redo Log Entries कहते हैं। ये Datablocks की Copy नहीं होते हैं बल्कि ये वे जानकारियां होती हैं, जिनकी जरूरत Datablocks को फिर से Reconstruct करने के लिए पडती है।
जब Database के Changes को Capture किया जाता है, तब इन Entries को जितना हो सकता है उतना छोटा रखा जाता है। इनका प्रयोग Database के Crash होने पर Recovery के लिए किया जाता है। Buffer को Memory में Circular Area के रूप में Use किया जाता है, इसलिए Buffer Memory के अन्त पर पहुंच कर फिर से Memory की शुरूआत से Data Holding का काम करने लगता है।
Redo Log Entries को Storage में Permanently Write या Overwrite किया जाता है। Log Writer Process (LGWR) इस Buffer को Monitor करता है और जब भी जरूरत होती है, इसके Contents को Ftush करता रहता है। Server Processes Redo Log Buffer में Writing को Control करता है और LGWR Redo Log Entries के आधार पर Changes को Buffer में Write करता है।
Shared Pool
Shared Pool SGA Memory का एक ऐसा Area होता है, जिसमें उस Memory का हिस्सा होता है, जिसे विभिन्न Users द्वारा Share किया जा सकता है। इसमें बहुत सारे छोटे-छोटे Memory Areas होते हैं, जिन्हें अग्रानुसार समझाया गया है:
Library Cache
Library Cache में ऐसे बहुत सारे Components होते हैं, जिन्हें विभिन्न Database Users द्वारा Share किया जाता है। इसका Shared SQL Area सबसे महत्वपूर्ण Component होता है। Shared SQL Area में हर SQL Statement की Detail के साथ ही SQL Statement के Execute होते समय के Execution Plan की भी Detail होती है, जिसे Parse Tree कहा जाता है।
Shared Area में वे Identical SQL Statement Hold होता है, जिसे एक से ज्यादा Users Share करते हैं। इस Statements का सभी Users के लिए बिल्कुल Identical होना जरूरी होता है साथ ही ये SQL Statements समान Object से ही Refer होने भी जरूरी होते हैं। इसका फायदा ये होता है कि यदि एक से ज्यादा Users एक समान SQL Statements को Execute कर रहे होते हैं, तो एक ही Object से Refer होने के कारण Oracle एक ही SQL Statement को Hold करता है, जिससे Database की Performance Increase हो जाती है।
Data Dictionary Cache
SGA का Data Dictionary Cache उन Tables की Information Hold करता है, जिन्हें Use किया जा रहा है। ये Table Name, Table Column Name व Column Data Types को Store करता है। इस स्थिति में जब भी किसी SQL को Parse करने की जरूरत होती है, SQL से सम्बंधित Information पहले से ही उपलब्ध रहती है। ये सभी Memory Areas व Processes के लिए Available रहता है और ये पूरी तरह से Performance से सम्बंधित होता है। Data Dictionary Cache के हिस्सों को भी उसी तरह से Flush किया जाता है, जिस तरह से Database Buffer Cache को किया जाता है।
Additional Memory Areas
इन सभी Memory Areas के अलावा दो और Memory Areas होते हैं, जो कि निम्नानुसार हैं:
- Program Global Area या PGA, जो कि Server Processes के लिए Control Information को Store करता है।
- Sort Areas जो कि Memory-Based Sorts के लिए Use होता है।
इस Post में हमने Oracle के Memory Structure को समझने की कोशिश की, जबकि Server Processes व Data Files के बारे में हम अगले Article में जानेंगे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Oracle 8i/9i SQL/PLSQL in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Oracle 8i/9i SQL/PLSQL in Hindi | Page: 587 | Format: PDF