কম্পিউটার টিউটোরিয়াল

Oracle RAC-এ ক্যাশ ফিউশন দক্ষতা অর্জন: মূল ধারণা এবং বাস্তব অন্তর্দৃষ্টি

ক্যাশ ফিউশন, অর্থাৎ Oracle® রিয়েল অ্যাপ্লিকেশন ক্লাস্টার (RAC)-এ দুটি ইনস্ট্যান্সের মধ্যে ব্লক ট্রান্সফার, RAC-এ প্রধান এবং সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য।

ভূমিকা

Oracle RAC Cache Fusion-এ Oracle বলে, "RAC ক্লাস্টারে প্রতিটি ইনস্ট্যান্সের নিজস্ব লোকাল বাফার ক্যাশ থাকে যেখানে এটি ক্যাশ কার্যকারিতা করে। কিন্তু যখন একাধিক ব্যবহারকারী বিভিন্ন নোডে সংযুক্ত থাকে, তারা প্রায়শই অন্য ইনস্ট্যান্সের অধীন একটি ডেটা ব্লক অ্যাক্সেস বা লক করতে চায়।

" solchen cases-এ, অনুরোধকারী ইনস্ট্যান্স ডেটা ব্লকটি জন্য ধারক ইনস্ট্যান্সকে অনুরোধ করে এবং একটি ইন্টারকনেক্ট মেকানিজমের মাধ্যমে তা অ্যাক্সেস করে। এই ধারণাটিকে Cache Fusion বলা হয়।"

সিঙ্গল ইনস্ট্যান্স

Cache Fusion অন্বেষণ করার আগে, আসুন দেখি একটি ডেটা ব্লক অনুরোধ হলে non-RAC ডাটাবেস কীভাবে আচরণ করে।

Gopi-এর Cache Fusion ব্লগ পোস্ট থেকে আঁকা, সিঙ্গল ইনস্ট্যান্সে চার-ধাপের ট্রানজ্যাকশন প্রক্রিয়া নিচে দেওয়া হলো:

  1. যখন একজন ব্যবহারকারী gần সম্প্রতি মডিফাই করা একটি ব্লক পড়ে, সেটি ব্লকে একটি সক্রিয় ট্রানজ্যাকশন খুঁজে পেতে পারে।
  2. ব্যবহারকারীকে আন্ডো সেগমেন্ট হেডার পড়তে হবে ট্রানজ্যাকশনটি কমিট হয়েছে কিনা তা সিদ্ধান্ত लेने के लिए।
  3. যদি ট্রানজ্যাকশন কমিট না হয়, প্রসেস বাফার ক্যাশে ব্লকে থাকা ডেটা এবং আন্ডো সেগমেন্টে সংরক্ষিত ডেটা ব্যবহার করে একটি কনসিস্টেন্ট রিড (CR) ভার্সন তৈরি করে।
  4. যদি আন্ডো সেগমেন্ট ট্রানজ্যাকশন কমিট হওয়া দেখায়, প্রসেসটি ব্লকটি পুনর্বিবেচনা করতে হবে এবং ব্লকটি পরিষ্কার করে পরিবর্তনগুলির জন্য রিডো জেনারেট করতে হবে।

এখন, Cache Fusion হিসেবে পরিচিত দুটি-ইনস্ট্যান্স ক্লাস্টার হিসেবে RAC-এ একই পরিস্থিতি দেখি।

Cache Fusion

Gopi pokrač করলেন, "RAC-এ, একই ডেটাবেস ফাইল অ্যাক্সেস করা [দুই] বা তার বেশি ইনস্ট্যান্স রয়েছে [যেগুলো একই স্টোরেজে আছে (যেমন, ASM)]। প্রতিটি ইনস্ট্যান্সের নিজস্ব SGA, ব্যাকগ্রাউন্ড প্রসেস থাকে, অর্থাৎ প্রতিটি ইনস্ট্যান্সের নিজস্ব বাফার ক্যাশ থাকে (প্রতিটি ইনস্ট্যান্সের জন্য লোকাল)। এই বাফার ক্যাশগুলো ইনস্ট্যান্স লেভেলে স্বতন্ত্রভাবে কাজ করে এবং ডাটাবেস লেভেলে একসাথে ফিউজ হয়ে ডেটা ব্লক শেয়ার করার জন্য একটি একক এন্টিটি (গ্লোবাল ক্যাশ) তৈরি করে। এটাকেই আমরা Cache Fusion বলি। Cache Fusion হাই-স্পিড IPC ইন্টারকনেক্ট ব্যবহার করে ক্লাস্টারে ইনস্ট্যান্সের মধ্যে ক্যাশ-টু-ক্যাশ ডেটা ব্লক ট্রান্সফার প্রদান করে। এই ডেটা-ব্লক শিপিং ডিস্ক I/O দূর করে এবং রিড/রাইট কনকারেন্সি অপ্টিমাইজ করে।"

এই বোঝাপড়া আমাদের গ্লোবাল ক্যাশ সার্ভিস (GCS)-এ আনে, যা ইনস্ট্যান্সের মধ্যে ব্লক ট্রান্সফারের জন্য দায়ী।

Gopi-এর পোস্টে উল্লেখিত GCS ব্যাকগ্রাউন্ড প্রসেসগুলো নিচে দেওয়া হলো:

  • গ্লোবাল ক্যাশ সার্ভিস প্রসেস (LMSn)
  • গ্লোবাল এনকিউ সার্ভিস ডেমন (LMD)

Gopi বললেন, "এই ব্যাকগ্রাউন্ড প্রসেসগুলোর মধ্যে যাওয়ার আগে, আসুন দেখি Oracle কীভাবে ডেটা ব্লক বরতavy এবং সেগুলো কীভাবে ম্যানেজ করে।

"Oracle ডেটা ব্লকগুলোকে রিসোর্স হিসেবে বিবেচনা করে। এই রিসোর্সগুলোमें से প্রতিটিকে বিভিন্ন মোডে ধारण করা যেতে পারে, যা ডেটা ইন্টিগ্রিটি বজায় রাখার জন্য একটি গুরুত্বপূর্ণ মেকানিজম। রিসোর্স হোল্ডার ডেটা মডিফাই করতে চায় কিনা বা ডেটা পড়তে চায় সেটির উপর নির্ভর করে এই মোডগুলো তিন প্রকারে ভাগ করা হয়েছে।"

Gopi মোডগুলো নিচে লিস্ট করেছেন:

  • Null (N) মোড: Null মোড সাধারণত একটি প্লেসহোল্ডার হিসেবে ধারন করা হয়।
  • Shared (S) মোড: এই মোডে, একটি ডেটা ব্লক অন্য সেশন দ্বারা মডিফাই করা হয় না কিন্তু কনকারেন্ট শেয়ার্ড অ্যাক্সেস অনুমতি দেয়।
  • Exclusive (X) মোড: এই লেভেল ধারক প্রসেসকে এক্সক্লুসিভ অ্যাক্সেস দেয়। অন্যান্য প্রসেস রিসোর্সে লিখতে পারে না। এর কনসিস্টেন্ট রিড ব্লক থাকতে পারে।

গ্লোবাল ক্যাশ সার্ভিস ডেমন (LMSn)

যখন একটি ইনস্ট্যান্স থেকে অনুরোধ আসে, Gopi বলেন, "GCS মেমরিতে ব্লক কপি রেখে অন্য ইনস্ট্যান্সগুলোর জন্য ব্লক শিপিং সংগঠিত করে। এমন প্রতিটি কপিকে পাস্ট ইমেজ (PI) বলা হয়। [...] ডেটা ব্লক কতবার ডার্টি স্টেজে অনুরোধ করা হয়েছে তার উপর নির্ভর করে একাধিক PI থাকতে পারে।"

নোট: Gopi যোগ করেন, "যদি আপনি একটি ডেটা ব্লক পড়তে চান, সেটি অবশ্যই একটি কনসিস্টেন্ট স্টেটে পড়তে হবে। আপনাকে অন্যরা করা পরিবর্তন পড়তে অনুমতি নেই।"

গ্লোবাল এনকিউ সার্ভিস ডেমন (LMD)

Gopi ব্যাখ্যা করেন, "গ্লোবাল এনকিউ সার্ভিস (GES) সমস্ত Oracle এনকিউইং মেকানিজমের স্ট্যাটাস ট্র্যাক করে। GES ডিকশনারি ক্যাশ লক, লাইব্রেরি ক্যাশ লক এবং ট্রানজ্যাকশনে কনকারেন্সি কন্ট্রোল সম্পাদন করে। এটি একাধিক ইনস্ট্যান্স দ্বারা অ্যাক্সেস করা রিসোর্সের জন্য এই অপারেশন সম্পাদন করে। GES ডেটা ফাইল এবং কন্ট্রোল ফাইল অ্যাক্সেস কন্ট্রোল করে কিন্তু ডেটা ব্লকের জন্য না।"

Gopi শেয়ার করা GES ম্যানেজড রিসোর্সগুলো নিচে দেওয়া হলো:

  • ট্রানজ্যাকশন লক: এটি এক্সক্লুসিভ মোডে অর্জিত হয় যখন একটি ট্রানজ্যাকশন তার পরিবর্তন শুরু করে (ইনসার্ট, আপডেট, ইত্যাদি)। লকটি ট্রানজ্যাকশন কমিট বা রোলব্যাক হওয়া পর্যন্ত ধারন করা থাকে।
  • লাইব্রেরি ক্যাশ লক: যখন একটি ডাটাবেস অবজেক্ট (যেমন টেবিল, ভিউ, প্যাকেজ, প্যাকেজ বডি, [...] এবং সকল) SQL, DML বা DDL, PL/SQL, বা Java স্টেটমেন্ট পার্সিং বা কম্পাইল করার সময় রেফারেন্স করা হয়, স্টেটমেন্ট পার্স বা কম্পাইল করার প্রসেস সঠিক মোডে লাইব্রেরি ক্যাশ লক অর্জন করে।
  • ডিকশনারি ক্যাশ লক: ক্লাস্টার ডাটাবেস মোডে গ্লোবাল এনকিউইস ব্যবহার করা হয়। ডেটা ডিকশনারি কাঠামো একটি ক্লাস্টার ডাটাবেসে সমস্ত Oracle ইনস্ট্যান্সের জন্য একই।
  • টেবিল লক: এগুলো পুরো টেবিল(গুলি) রক্ষা করার GES লক। একটি ট্রানজ্যাকশন টেবিল মডিফাই হলে টেবিল লক অর্জন করে। একটি টেবিল লক নাল (N), রো শেয়ার (RS), রো এক্সক্লুসিভ (RX), শেয়ার লক (S), শেয়ার রো এক্সক্লুসিভ (SRX), বা এক্সক্লুসিভ (X) সহ বিভিন্ন মোডে ধারন করা যেতে পারে।

পাস্ট এবং কনসিস্টেন্ট রিড ইমেজ

মূল পরিস্থিতিতে যাওয়ার আগে, পাস্ট ইমেজ (PI) এবং কনসিস্টেন্ট রিড (CR) ইমেজ বুঝতে হবে।

পাস্ট ইমেজ

Rohit Gupta তার আর্টিকেলে, Oracle RAC Cache Fusion-এ শেয়ার করেছেন, "পাস্ট ইমেজের ধারণা RAC সেটআপের জন্য খুব নির্দিষ্ট। একটি ইনস্ট্যান্স আপডেটের জন্য একটি ডেটা ব্লকে এক্সক্লুসিভ লক ধারণ করছেএকটি পরিস্থিতি বিবেচনা করুন। যদি RAC-এ অন্য কোনো ইনস্ট্যান্স ব্লকটি প্রয়োজন হয়, ধারক ইনস্ট্যান্স তার বাফার ক্যাশে ব্লকটির একটি PI (পাস্ট ইমেজ) রাখে ডিস্কে না লিখে অনুরোধকারী ইনস্ট্যান্সকে ব্লকটি পাঠাতে পারে। মূলত, PI হলো ডেটা ব্লক ডিস্কে লেখার আগের কপি।"

কনসিস্টেন্ট রিড ইমেজ:

Gupta pokrač করেন, "একটি নির্দিষ্ট ব্লক ট্রানজ্যাকশন [A1] দ্বারা অ্যাক্সেস/মডিফাই হচ্ছে, এবং একই সাথে অন্য ট্রানজ্যাকশন [A2] ব্লকটি অ্যাক্সেস/পড়তে চাইলে একটি কনসিস্টেন্ট রিড প্রয়োজন। যদি [A1] কমিট না হয়, [A2] आगे বাড়তে ব্লকটির একটি কনসিস্টেন্ট রিড [(নন-মডিফাইড ব্লক)] কপি প্রয়োজন। সেই ব্লকের জন্য UNDO ডেটা ব্যবহার করে একটি CR কপি তৈরি করা হয়।"

Cache Fusion পরিস্থিতি

Cache Fusion-এর তিনটি ভিন্ন পরিস্থিতি রয়েছে:

  • রিড-রিড পরিস্থিতি
  • রিড-রাইট পরিস্থিতি
  • রাইট-রাইট পরিস্থিতি

রিড-রিড পরিস্থিতি:

এটি একটি নন-ক্রিটিক্যাল পরিস্থিতি কারণ ব্লক অনুরোধকারী ইনস্ট্যান্স এবং ব্লক করার ইনস্ট্যান্স উভয়ই রিড ট্রানজ্যাকশন অনুরোধ করছে। এখানে কোনো এক্সক্লুসিভ লক হয় না। ইনস্ট্যান্স B GCS-এ একটি রিড ব্লক অনুরোধ করে। GCS ব্লকটি উপলব্ধ কিনা চেক করে, যা ইনস্ট্যান্স A-এর অধীনে, এবং একটি শেয়ার্ড লক অর্জন করে। এখন GCS ইনস্ট্যান্স A-কে অনুরোধকারী ইনস্ট্যান্স B-কে ব্লকটি শিপ করার জন্য অনুরোধ করে।

রিড-রাইট পরিস্থিতি:

এটি একটি ক্রিটিক্যাল পরিস্থিতি।

ইনস্ট্যান্স A একটি ডেটা ব্লক আপডেট করছে, তাই সেটিকে এক্সক্লুসিভ লক অর্জন করতে হবে। কিছুক্ষণ পর, ইনস্ট্যান্স B একই ডেটা ব্লকের জন্য GCS-এ একটি রিড অনুরোধ পাঠায়।

GCS চেক করে এবং পায় যে ইনস্ট্যান্স A একই ব্লকে এক্সক্লুসিভ লক অর্জন করেছে। তাই, GCS ইনস্ট্যান্স A-কে ব্লকটি রিলিজ করতে বলে। এখন, ইনস্ট্যান্স A তার নিজস্ব বাফার ক্যাশে একটি CR ইমেজ তৈরি করে এবং GCS-কে সেই অনুযায়ী নোটিফাই করে ইনস্ট্যান্স B-কে শিপ করার জন্য।

CR ইমেজ তৈরিতে GCS জড়িত, এবং অনুরোধকারী ইনস্ট্যান্সে শিপিং করা হলো যেখানে Cache Fusion কাজে আসে।

রাইট-রাইট পরিস্থিতি

ইনস্ট্যান্স A এবং ইনস্ট্যান্স B উভয়ই একটি ডেটা ব্লকে এক্সক্লুসিভ লক অর্জন করার চেষ্টা করছে।

ইনস্ট্যান্স B GCS-এ একটি ব্লক অনুরোধ পাঠায়। GCS উপলব্ধতা চেক করে এবং পায় ইনস্ট্যান্স A লক অর্জন করেছে। অতএব, GCS ইনস্ট্যান্স A-কে ইনস্ট্যান্স B-র জন্য ব্লকটি রিলিজ করতে বলে। এখন, ইনস্ট্যান্স A তার নিজস্ব বাফারে বর্তমান ব্লকটির একটি PI তৈরি করে, রিডো এন্ট্রি তৈরি করে, এবং GCS-কে নোটিফাই করে ইনস্ট্যান্স B-কে ব্লকটি শিপ করার জন্য।

ইনস্ট্যান্স B এখন ব্লকটি ব্যবহার করে এবং সাধারণ तौर पर পরিবর্তন করে।

CR এবং PI-এর মূল পার্থক্য

Gupta PI বনাম CR ইমেজ সম্পর্কে নিচের চূড়ান্ত মতামত যোগ করেন: "[CR ইমেজ শিপ করা হয়েছিল] একটি রিড-রাইট ধরনের কনটেনশন এড়াতে কারণ অনুরোধকারী ইনস্ট্যান্স রাইট অপারেশন করতে চায় না এবং তাই ব্লকে এক্সক্লুসিভ লক দরকার নেই। তাই একটি রিড অপারেশনের জন্য, ব্লকের CR ইমেজ যথেষ্ট। একদিকে রাইট-রাইট কনটেনশনের জন্য, অনুরোধকারী ইনস্ট্যান্সও ডেটা ব্লকে এক্সক্লুসিভ লক অর্জন করতে চায়। [লিখতে অপারেশনের জন্য লক অর্জন করতে], এটিকে CR ইমেজ নয়, বরং একচুত ব্লকটি দরকার। ধারক ইনস্ট্যান্স সেজন্য একচুত ব্লকটি পাঠায় কিন্তু ব্লকটি ডিস্কে লেখা পর্যন্ত ব্লকটির PI রাখার জন্য দায়ী। তাই, যদি কোনো ইনস্ট্যান্স ফেইল বা ক্র্যাশ হয়, Oracle RAC ইনস্ট্যান্স জুড়ে PI থেকে ব্লকটি পুনর্নির্মাণ করতে পারে। একবার ব্লকটি ডিস্কে লেখা হয়ে গেলে, ক্র্যাশের ক্ষেত্রে রিকভারি দরকার নেই, এবং সংশ্লিষ্ট PI গুলো ডিসকার্ড করা যেতে পারে।"

আমাদের ডেটা সার্ভিস সম্পর্কে আরও জানুন।

ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য করুন বা প্রশ্ন জিজ্ঞাসা করুন। আপনি আমাদের সাথে কথোপকথনও শুরু করতে পারেন।


  1. স্ট্রেচ ডেটাবেস: দক্ষ ডেটা ম্যানেজমেন্টের একটি সহজ গাইড

  2. Transparent Data Encryption (TDE) দিয়ে Oracle ডাটাবেস সিকিউর করুন

  3. MongoDB স্পেস ম্যানেজমেন্ট 습득: অ্যালোকেশন, ড্যাশবোর্ড, এবং স্কেলিং টিপস

  4. বিগ ডেটা বনাম ডেটা মাইনিং বনাম মেশিন লার্নিং: মূল পার্থক্য ব্যাখ্যা