نشر بواسطة : Obay Salah , November 20, 2024

يقوم السيرفر بعمليات نسخ لكتل البيانات إلى ذاكرة قاعدة البيانات (Database Buffer Cache). إذا تم تعديل الكتلة في هذه الذاكرة، فإن عملية DBWn ستقوم بكتابة الكتلة إلى ملفات البيانات.

الإعداد الافتراضي للمثيل يعتمد على تكوين ذاكرة قاعدة البيانات كجزء واحد لاستقبال الكتل، لكن من المحتمل تقسيم هذه الذاكرة إلى أجزاء أصغر لتحسين استخدام قاعدة البيانات.

سنناقش الآن الخوارزمية التي تستخدمها أوراكل لاختيار البفرات التي سيتم وضع الكتل فيها، وكذلك لتحديد الكتل التي سيتم كتابتها مرة أخرى في ملف البيانات.

قائمة LRU و Queue Checkpoint

جميع البفرات في ذاكرة قاعدة البيانات ستكون في إحدى الحالات الثلاث التالية:

  • محجوزة (Pinned): وهي بفر يتم استخدامه الآن في الذاكرة، وما لم يتم الانتهاء من العمل في هذا البفر، فلا يمكننا استخدامه في عمليات أخرى.
  • متسخة (Dirty): وهي بفر يحتوي على نسخة من الكتلة تختلف عن النسخة الموجودة في القرص، وهي عبارة عن كتلة تم نسخها إلى الذاكرة وتم تعديلها ولكن لم يتم كتابتها في القرص، لذا فإنه من غير الممكن جلب كتلة أخرى من ملف البيانات ووضعها في هذا البفر ما لم يتم تنظيفه أولاً عبر DBWn الذي سيقوم بكتابته أولاً في ملف البيانات.
  • خالية (Free): وهي بفر ليس محجوزًا ولا متسخًا، وهذا يعني أن هذا البفر إما غير مستخدم أو تم تنظيفه.

عند تشغيل المثيل، فإن جميع البفرات تكون غير مستخدمة.

عندما يحتاج سيرفر بروسيس إلى قراءة البيانات في الذاكرة، يجب عليه أولاً البحث عن الكتلة في القرص والبحث عن بفر مجاني في ذاكرة قاعدة البيانات الذي سيستقبل الكتلة من القرص مع التأكيد على أنه لا يمكن نسخ كتلة من القرص إلى بفر محجوز، لأنه سيكون محميًا بواسطة آلية القفل، وكذلك لا يمكن نسخ كتلة من القرص إلى بفر متسخ ما لم يتم كتابة التعديلات في القرص عبر DBWn، ولكن يمكن نسخ الكتلة في بفر مجاني لأن البيانات الموجودة به متاحة أيضًا في القرص. هناك العديد من البفرات المجانية في ذاكرة قاعدة البيانات، ولكن السؤال الذي يطرح نفسه هو: أي بفر مجاني سيختاره سيرفر بروسيس لتخزين الكتلة؟ هذا الأمر مهم بالنسبة للأداء، والاختيار يتم بناءً على خوارزمية (LRU) Least Recently Used.

تحتوي جميع البفرات في ذاكرة قاعدة البيانات على مؤشرات، وهناك قائمة تحتوي على جميع البفرات تُسمى LRU، ويتم إضافة البفرات الجديدة في القائمة بناءً على آخر وصول لها، لذا فإن البفر الذي تم الحصول عليه منذ برهة سيتم إضافته في نهاية قائمة (LRU).

عندما يبحث سيرفر بروسيس عن بفر، سيتم ترشيح البفر الأقل استخدامًا مؤخرًا (نهاية قائمة LRU)، بينما سيتم وضع البفر الأكثر استخدامًا مؤخرًا في بداية القائمة، لذا فإن البفر المزدحم جدًا لن يتم كتابة محتوياته في القرص لأن سيرفر بروسيس لن يتمكن من العثور عليه لأنه يوجد في نهاية القائمة الأقل استخدامًا.

هناك قائمة أخرى للبفرات تُسمى Checkpoint Queue، وهذه القائمة تحتوي على البفرات المتسخة التي تنتظر كتابة محتوياتها في القرص عن طريق عملية DBWn.

يقوم السيرفر بعملية البحث، وإذا وجد بفرًا مجانيًا، قام بإضافته إلى قائمة (LRU)، وإذا تم العثور على بفر متسخ، فإنه يقوم بإضافته إلى قائمة Checkpoint Queue.

بالطبع، تتم إضافة العناوين إلى القوائم وليس البفر نفسه.

إذا كانت قائمة Checkpoint تحتوي على بفرات متسخة، وبعد فترة معينة، يتم كتابة محتويات هذه البفرات إلى القرص عبر DBWn، ومن ثم تصبح نظيفة أو بفرات مجانية، مما يمكن استخدامها مرة أخرى.

هذا يعني أن السيرفر بروسيس ينتظر عملًا كثيرًا، فهو يقوم أولاً بالبحث عن الكتلة في القرص، ثم يبحث عن البفرات المجانية، وأيضًا يبحث عن البفرات المتسخة ويقوم بوضعها في قائمة Checkpoint ليتم كتابتها لاحقًا في القرص.

تسمح هذه الآلية البسيطة لأوراكل بالحفاظ على (Disk I/O) في الحد الأدنى.

يقوم DBWn بكتابة فقط البفرات المتسخة والثابتة، أما البفرات التي لم يتم تغييرها فلن يتم كتابتها في القرص، كذلك سيتم كتابة البفر المتسخ في القرص فقط إذا لم يتم التعامل معه لفترة معينة. اللحظة الوحيدة التي يتم فيها كتابة جميع البفرات المتسخة إلى القرص هي لحظة حدوث Database Checkpoint، وكذلك لحظة حدوث Tablespace Checkpoint يتم نقل جميع البفرات المتسخة الخاصة بهذا الجدول إلى القرص، ويتم تحديث Tablespace Checkpoint بصورة آلية نتيجة للعمليات التالية:

  • إسقاط الجدول
  • جعل الجدول للقراءة فقط
  • وضع الجدول في وضع النسخ الاحتياطي الساخن
  • أخذ الجدول في وضع عدم الاتصال.


علامات : Database

يمكن ان يعجبك ايضا


Comments

لايوجد تعليق حتى الان