গত সংখ্যায় ওরাকল আর্কিটেকচারের মৌল উপাদানগুলো নিয়ে সাধারণ কিছু আলোচনা হয়েছিল। এছাড়া ইউজারের সাথে ওরাকল সার্ভারের সংযোগ স্থাপন ও সেশন তৈরির প্রেক্ষাপটসহ ওরাকল ডাটাবেজ এবং এর সাথে সম্পর্কিত কিছু গুরুত্বপূর্ণ ফাইল নিয়ে আলোচনা করা হয়েছিল।
এ সংখায় ওরাকল আর্কিটেকচারের অন্যতম উপাদান ইনস্ট্যান্স ও এর সাথে প্রাসঙ্গিক অন্যান্য বিষয় নিয়ে আলোচনা করা হয়েছে। একজন দক্ষ ডিবিএ-এর অবশ্যই সার্থকভাবে ইনস্ট্যান্স ম্যানেজ করার মতো যথেষ্ট দক্ষতা থাকতে হবে। ইনস্ট্যান্স ম্যানেজমেন্টের ওপর নির্ভর করে ওরাকল ডাটাবেজের পারফরমেন্স।
ওরাকলের মেমরি স্ট্রাকচার প্রধানত দুই ধরনের মেমরি এরিয়ার সমন্বয়ে গঠিত। ০১. এসজিএ (সিস্টেম গ্লোবাল এরিয়া)- ইনস্ট্যান্স, স্টার্টআপ হওয়ার সময় এ মেমরি অ্যালোকেট হয়। ০২. পিজিএ (প্রোগ্রাম গ্লোবাল এরিয়া)- সার্ভার প্রসেস স্টার্ট হওয়ার সময় এ মেমরি অ্যালোকেট হয়।
সিস্টেম গ্লোবাল এরিয়া
সিস্টেম গ্লোবাল এরিয়াকে শেয়ারড গ্লোবাল এরিয়াও বলা হয়। সিস্টেম গ্লোবাল এরিয়া মূলত পাঁচ ধরনের মেমরি স্ট্রাকচার নিয়ে গঠিত :
০১. শেয়ারড পুল,
০২. ডাটাবেজ বাফার ক্যাশ,
০৩. রিডু লগ বাফার,
০৪. লার্জ পুল ও
০৫. জাভা পুল।
ডাটাবেজ প্রসেস যেসব তথ্য শেয়ার করে এসজিএ তা স্টোর করে, ধারণ করে ডাটা ও কন্ট্রোল ইনফরমেশন এর চারিত্রিক বৈশিষ্ট্যের মধ্যে উল্লেখযোগ্য।
০১. এটা ডাইনামিক,
০২. SGA-MAX-SIZE প্যারামিটার দিয়ে এর সাইজ নির্ধারণ করা হয়,
০৩. অ্যালোকেট ও ট্রাক্ট হয় SAG-এর গ্রানুলসের ভিত্তিতে। গ্রানুলসের আকার নির্ভর করে SGA-MAX-SIZE -এর ওপর। SGA -এর মেমরি স্ট্রাকচার অর্থাৎ শেয়ারড পুল ডাটাবেজ বাফার ক্যাশ রিডু লগ, বাফার লার্জ পুল, জাভা পুল, গ্রানুলস সীমানার ভেতরই সঙ্কুচিত বা প্রসারিত হতে পারে। SGA -এর মেমরি স্ট্রাকচারগুলো নিয়ে বিস্তারিত আলোচনাই পাঠকের কাছে ইনস্ট্যান্স ম্যানেজমেন্টের বিষয়টিকে বোধগম্য করে তুলবে।
০১. শেয়ারড পুল :
ফিক্সড ও ভ্যারিয়েবল এই দুই ধরনের মেমরি স্ট্রাকচার শেয়ারড পুল ধারণ করে। ফিক্সড স্ট্রাকচার আপেক্ষিকভাবে একই অবস্থায় থাকলেও ভ্যারিয়েবল স্ট্রাকচার প্রোগ্রামের প্রয়োজনে সঙ্কুচিত এবং প্রসারিত হতে পারে। এদের প্রকৃত আকার ইনিশিয়ালাইজ প্যারামিটারের ওপর নির্ভরশীল এবং এ সম্পর্কিত সব বিষয় ওরাকল তার নিজস্ব অ্যালগোরিদমের মাধ্যমে নিষ্পত্তি করে থাকে। শেয়ারড পুল ধারণ করে সাম্প্রতিক সম্পাদিত ঝছখ স্টেটমেন্ট এবং ডাটা ডেফিনেশন। এটা দুটি পারফরমেন্স সম্পর্কিত মেমরি স্ট্রাকচারের সমন্বয়ে গঠিত।
চিত্র-১
০১. লাইব্রেরি ক্যাশ,
০২. ডাটা ডিকশনারি ক্যাশ। (চিত্র-১) ডাইনামিক্যালি এর আকার পরিবর্তন করা যায় ALTER SYSTEM SET কমান্ড দিয়ে।
ALTER SYSTEM SET SHARED_POOL_SIZE = 100M;
ক. লাইব্রেরি ক্যাশ :
সম্প্রতি সম্পাদিত SQL এবং PL/SQL স্টেটমেন্টগুলো থাকে লাইব্রেরি ক্যাশে, যাতে ইউজার পরবর্তী সময়ে তার প্রয়োজনমতো স্টেটমেন্টগুলো ফিজিক্যাল মেমরি না খুঁজেই সহজে তার হাতের কাছে পেয়ে যান, যা ডাটাবেজের পারফরমেন্সকে অনেক বাড়িয়ে দেয়। এছাড়াও সার্ভারে লগঅন করা অন্য ইউজারও এই SQL এবং PL/SQL স্টেটমেন্টগুলো শেয়ার করতে পারেন। লাইব্রেরি ক্যাশ দুই ধরনের স্ট্রাকচারকে ধারণ করে থাকে :
০১. শেয়ারড SQL,
০২. শেয়ারড PL/SQL ।
ওরাকল লিস্ট রিসেন্ট ইউজ (খজট) অ্যালগোরিদমের মাধ্যমে লাইব্রেরি ক্যাশ ম্যানেজ করে থাকে।
খ. ডাটা ডিকশনারি :
ক্যাশ ডাটা ডিকশনারি ক্যাশকে অন্য কথায় ডিকশনারি ক্যাশ অথবা রো ক্যাশ বলা হয়। ডাটাবেজ সংক্রান্ত সব তথ্য যেমন ইউজার অ্যাকাউন্ট, ডাটা সেগমেন্ট, এক্সটেন্ড লোকেশন, টেবল ডেসক্রিপশন, ইউজার প্রিভিলেজ ডাটা ডিকশনারি টেবলে সংরক্ষিত থাকে। যখন ওরাকল সার্ভারের এসব তথ্য প্রয়োজন হয় তখন ডাটা ডিকশনারি টেবল থেকে রিড করে এবং তা পাঠায় ডাটা ডিকশনারি ক্যাশে। এর সার্বিক আকার নির্ভর করে শেয়ারড পুলের আকারের ওপর। ওরাকল একে অভ্যন্তরীণ ব্যবস্থাপনার মাধ্যমে নিয়ন্ত্রণ করে, যদি এর আকার বেশ ছোট হয়, ওরাকল সার্ভারকে বারবার ডাটা ডিকশনারি টেবলে কোয়ারি করতে হবে। যার ফলে ডাটাবেজ তার কাঙ্ক্ষিত পারফরমেন্স পেতে ব্যর্থ হয়।
০২. ডাটাবেজ বাফার ক্যাশ :
চিত্র-২
ডাটা ফাইল থেকে যেসব ডাটা ব্লক রিড্রাইভ করা হয়, তা এখানে সংরক্ষিত অবস্থায় থাকে। যখন কোনো কোয়ারি চালানো হয়, তখন সার্ভার প্রথমে ডাটাবেজ বাফার ক্যাশে তার প্রয়োজনীয় ডাটা ব্লকটিকে খুঁজতে থাকে। যদি তা এখানে খুঁজে পাওয়া না যায়, তাহলে সার্ভার প্রসেস ডাটা ফাইল থেকে ওই ব্লকটিকে রিড করবে এবং তার একটি কপি ডাটাবেজ বাফার ক্যাশে সংরক্ষণ করে রাখবে। এর ফলে পরে যখন ওই ব্লকটির প্রয়োজন হবে তখন সার্ভারকে ফিজিক্যাল রিড না করেই মেমরিতে ব্লকটিকে পেয়ে যাবে। এলআরইউ অ্যালগোরিদমের মাধ্যমে সার্ভার একটি ডাটা ব্লক ডাটাবেজ বাফার ক্যাশে কতক্ষণ থাকবে তা নির্ধারণ করে থাকে। প্রতিটি বাফারের সাইজ ওরাকল ব্লক সাইজের সমান এবং এটা নির্ধারিত হয় DB_BLOCK_SIZE প্যারামিটারের সাহায্যে (চিত্র-২)।
একে ডাইনামিক্যালি রিসাইজ করা যায় যেমন- ALTER SYSTEM SET SHARED_POOL_SIZE = 100M;
০৩. রিডু লগ বাফার :
চিত্র-৩
রিডু লগ বাফার ডাটা ফাইল ব্লকে যেসব পরিবর্তন হয়, তা সংরক্ষণ করে থাকে। এই তথ্যসমূহকে বলা হয় রিডু এন্ট্রি। INSERT, UPDATE, DELETE কমান্ড দিয়ে যেসব পরিবর্তন ডাটা ফাইলে হয়ে থাকে, তার একটি তথ্য রিডুল লগ বাফারে থাকে। রিডু লগ বাফারের প্রধান কাজ হচ্ছে রিকভারিতে সহায়তা করা। (চিত্র-৩) LOG_BUFFER ইনিশিয়ালাইজ প্যারামিটার দিয়ে এর আকার নির্ধারণ করা হয়।
০৪. লার্জ পুল :
এটি SAG-র একটি অপশনাল মেমরি, যা মূলত শেয়ারড সার্ভার সিস্টেমে লার্জ পুল সেশন মেমরি অ্যালোকেট করে থাকে। তবে এটা অন্যান্য মেমরি এরিয়ার মতো এলআরইউ অ্যালগোরিদম দিয়ে পরিচালিত হয় না। এর আকার নির্ধারিত হয় LARGE_POOL_SIZE প্যারামিটারের মাধ্যমে। ডাইনামিক্যালি একে পরিবর্তন করা যায়।
০৫. জাভা পুল :
যদি ওরাকল জাভা ব্যবহার করে তবে অবশ্যই জাভা পুলকে ঝবঃ করতে হবে। জাভা কমান্ড পার্সিংয়ের জন্য জাভা পুল প্রয়োজন হয়ে থাকে। এর আকার নির্ধারিত হয় Jav pool - Size প্যারামিটার দিয়ে। ওরাকল 9-এ ডিফল্ট জাভা পুল সাইজ 24 MB.
ব্যাকগ্রাউন্ড প্রসেস :
গত সংখ্যায় পাঁচ ধরনের ব্যাকগ্রাউন্ড প্রসেসের কথা বলা হয়েছিল। এবার এদের নিয়ে বিস্তারিত আলোচনা করা হয়েছে।
০১. ডাটাবেজ রাইটার (DBWN) :
চিত্র-৪
সার্ভার প্রসেস আন্ডু এবং ডাটা ব্লকে যেসব পরিবর্তন হয়, তা ডাটাবেজ বাফার ক্যাশে সংরক্ষণ করে রাখে। DBWN ডাটা ফাইলে ডাটাবেজ বাফার ক্যাশ থেকে ডাটা বাফার রাইট করে থাকে, যাতে ডাটাবেজ বাফার ক্যাশে যথেষ্ট পরিমাণ খালি স্পেস থাকে। এর ফলে ডাটাবেজের পারফরমেন্সের উন্নতি ঘটে। কারণ, সার্ভার প্রসেসকে শুধু ডাটাবেজ বাফার ক্যাশে পরিবর্তন করতে হয়। (চিত্র-৪)
নিচের যেকোনো একটি কারণ সঙ্ঘটিত হওয়ায় ডাটাবেজ রাইটার ডাটা ফাইলে রাইট করে থাকে।
০১. যখন চেক পয়েন্ট সংঘটিত হয়,
০২. ডাটা বাফার সংখ্যা স্রেজল্ট লেভেলে পৌঁছায়,
০৩. টাইম আউট হলে,
০৪. ফ্রি বাফার না থাকলে,
০৫. টেবল স্পেস OFFLINE অথবা READ ONLY অথবা BEGIN BACKUP হলে ও
০৬. টেবল DROP অথবা TRUN-CATE হলে।
০২. লগ রাইটার (LGWR) :
চিত্র-৫
লগ রাইটার ক্রমাগত লগ বাফার হতে নিন্মলিখিত যেকোনো পরিস্থিতিতে অনলাইন রিডু লগ ফাইলে লিখিতে থাকে।
০১. COMMIT ট্রানজেকশন হলে,
০২. রিডু লগ বাফার এক তৃতীয়াংশ পূর্ণ হয়ে গেলে,
০৩. 1 MB - এর বেশি রিডু লগ বাফারে পরিবর্তন হলে,
০৪. ডাটাবেজ রাইটার ডাটা ফাইলে রাইট করার আগে ও
০৫. প্রতি ৩ সেকেন্ড পর পর। (চিত্র-৫)
০৩. সিস্টেম মনিটর (SMON) :
চিত্র-৬
যদি কোনো কারণে ইনস্ট্যান্স ফেল করে তাহলে SAG তে অবস্থিত সব তথ্যই হারিয়ে যাবার কথা। উদাহরণস্বরূপ, অপারেটিং সিস্টেমের ফেইলিওর অথবা বৈদ্যুতিক গোলযোগের কথা বলা যেতে পারে। এরকম পরিস্থিতিতে SMON প্রসেস ডাটাবেজ রিওপেন করার সাথে সাথে ইনস্ট্যান্সকে রিকভার করে। যার ফলে SAGতে অবস্থিত আগের ডাটা হারিয়ে যাবার হাত থেকে রক্ষা পায়। (চিত্র- ৬)
০৪. প্রসেস মনিটর (PMON) :
চিত্র-৭
প্রসেস মনিটর কোনো প্রসেস মনিটর হতে ব্যর্থ হলে নিন্মলিখিত কাজগুলো করে থাকে ।
০১. ইউজারের কারেন্ট ট্রানজেকশনগুলো জড়ষষ করে থাকে,
০২. টেবল অথবা রো-তে যেসব লক ছিল, তা রিলিজ করে দেয়,
০৩. রিসোর্স ফ্রি করে ও
০৪. ডেড ডিসপেচারগুলো রিস্টার্ট করে। (চিত্র-৭)
০৫. চেকপয়েন্ট (CKPT) :
চিত্র-৮
প্রতি তিন মিনিট পর পর চেক পয়েন্ট প্রসেস কন্ট্রোল ফাইলে ওই সব তথ্য সংরক্ষণ করে যাতে রিকভারি শুরু করতে হবে তার নির্দেশনা থাকে। আর একে বলা হয় চেক পয়েন্ট। চেক পয়েন্টের মূল উদ্দেশ্য ডাটাবেজ বাফার ক্যাশের যেসব পরিবর্তন হয়েছে, তা ডাটা ফাইলে নিশ্চিতরূপে রাইট করা। মূলত ইনস্ট্যান্স ফেইলিওর হলে চেক পয়েন্ট পজিশন থেকেই ডাটাবেজ রিকভারি শুরু হয়ে থাকে। (চিত্র-৮)
চিত্র-৯
০৬. আর্কাইভার (ARCN) : আর্কাইভার একটি অপশনাল ব্যাকগ্রাউন্ড প্রসেস। যদিও এটা ডাটাবেজ রিকভারির জন্য খুবই গুরুত্বপূর্ণ হয়ে যায়। তখন সার্ভার প্রসেস পরবর্তী লগ ফাইলে তথ্য সংরক্ষণ শুরু করে। তথ্য সংরক্ষণের সময় এক লগ ফাইল হতে অন্য লগ সুইচ আর্কাইভার প্রসেস প্রতিটি লগ সুইচের সাথে সাথে ওই তথ্যগুলোকে আর্কাইভ রিডু লগ ফাইলে ট্রান্সফার করে থাকে। যার ফলে ডাটাবেজ সংঘটিত প্রতিটি পরিবর্তনই সংরক্ষিত থাকে আর এতে ডাটা নষ্ট হবার সম্ভাবনা দূর হয়। (চিত্র-৯)
ডাটাবেজ অ্যাডমিনিস্ট্রেটরকে তার কর্মজীবনে যত গুরুত্বপূর্ণ সিদ্ধান্ত নিতে হয় তার মধ্যে ডাটাবেজ কোন মোডে চলবে তা নির্ধারণ করা অন্যতম। NOARCHIVE মোডে অনলাইন রিডু লগ ফাইলের কোনো তথ্য আর্কাইভিং হয় না। তবে এ মোডে ডাটাবেজ অপেক্ষাকৃত দ্রুত থাকে। কারণ সার্ভারের কোনো রিসোর্সই আর্কাইভিংয়ে ব্যস্ত থাকতে হয় না। পক্ষান্তরে ARCHIVE মোডে অনলাইন রিডু লগ ফাইলের আর্কাইভ হয় যা সিস্টেমকে NOARCHIVE অপেক্ষা স্লো করে দেয়।
চিত্র-১০
প্রোগ্রাম গ্লোবাল এরিয়া (PGA) : প্রোগ্রাম গ্লোবাল এরিয়া বা প্রসেস গ্লোবাল এরিয়া একটি মেমরি রিজিওন, যা একটি একক সার্ভার প্রসেস অথবা একটি একক ব্যাকগ্রাউন্ড প্রসেসের ডাটা এবং কন্ট্রোল ইনফরমেশন ধারণ করে। যখন কোনো প্রসেস তৈরি হয় তখন মেমরিতে PGA অ্যালোকেট হয়। প্রসেস টার্মিনেশনের সাথে সাথে মেমরিতে তার স্থান ছেড়ে দেয়। (চিত্র-১০)
মোটামুটি ওরাকল আর্কিটেকচারের বিভিন্ন দিক নিয়ে আলোচনা করা হলো। এখানে মনে রাখা প্রয়োজন মেমরি স্ট্রাকচার, ব্যাকগ্রাউন্ড প্রসেস এবং প্রয়োজনীয় ফাইল সম্পর্কে ধারণা না থাকলে একজন ডিবিএ কোনোভাবেই তার দৈনন্দিন রুটিনমাফিক কাজ করতে সক্ষম হবেন না।
কজ ওয়েব
ফিডব্যাক : lfthekhar@infobizsol.com