ذاكرة الأوراكل Oracle Memory
ذاكرة الأوراكل هي جزء من الذاكرة الفعلية (RAM) الخاصة بالجهاز الذي يعمل عليه الأوراكل , يتم حجز جزء من هذه الذاكرة من قبل الأوراكل لتخزين البيانات التي تحتاج إليها قاعدة البيانات والمستخدمين بشكل متكرر وذلك بغرض تقليل عمليات القراءة من وسائط التخزين التي تحوي البيانات , وذلك أن القراءة من الذاكرة أسرع بكثير من القراءة من وسائط التخزين الأمر الذي يحسن الأداء بشكل عام .
يتم حجز مساحة من الذاكرة الفعلية للجهاز لكل قاعدة بيانات عند تشغيل قاعدة البيانات , فكل قاعدة بيانات تقوم بحجز مساحة خاصة بها من المساحة المتوفرة , لتقوم لاحقا بإستخدام هذه الذاكرة في القيام بالأتي :
منطق البرامج
معلومات عن جلسات العمل (session ) , بما فيها جلسات العمل غير الفاعلة (inactive )
المعلومات المتعلقة بتنفيذ البرامج.
المعلومات المشتركة (shared) والاتصالات بين عمليات الأوراكل , مثل معلومات القفل (lock)
تخزين البيانات الأكثر طلبا , مثل بيانات كتل البيانات وبيانات (data block ) وسجل الإرجاع (redo log )
تتكون ذاكرة الأوراكل من جزئين هما :
System Global Area
Program Global Areas
System Global Area SGA
تعتبر ذاكرة SGA هي الذاكرة الكلية المتاحة لقاعدة البيانات وتعتمد قاعدة البيانات في أدائها من حيث السرعة والكفاءة علي حجمها وطريقة أعدادها . وهي كما بالشكل التالي :
يتم بناء هذه الذاكرة عند بدء عمل هيئة الأوراكل , في مرحلة nomount من التشغيل . وتكون متاحة لجميع عمليات هيئة الأوراكل وتحوي داخلها عدد الوحدات الفرعية وهي :
Shared Pool
Database Buffer Cashe
Large Pool
Java Pool
Redo Log Buffer Cashe
Shared Pool
هذا الجزء من الذاكرة مختص بتخزين معلومات عن عبارات (SQL ) التي قام المستخدم بإستخدامها وعن أسلوب التعامل مع الإجراءات (procedures ) والدوال (functions ) والحزم البرمجية , وهو أيضا معني بتخزين بيانات قاموس البيانات الخاص بالأوراكل التي يحوي بيانات عن مكونات قاعدة البيانات مثل مكونات الجداول الأعمدة التي فهرستها وغيرها من البيانات المتعلقة بقاموس البيانات Data dictionary بالإضافة إلي مساحة ثابتة يتم حجزها بناء علي نوع الأوراكل المستخدم ونظام التشغيل .
وكما هو واضح من الشكل أعلاه فإن Shared Poolتحوي ثلاثة أجزاء رئيسية هي :
Library Cashe
Dictionary Cashe
Fixed Portion
Library Cashe
الجزء المهم بالنسبة لمدير قاعدة البيانات في هذا الجزء من الذاكرة هو Library Cashe وذلك أن توفر مساحة كافية في هذا الجزء من ذاكرة الأوراكل تسمح لجميع العبارات والدوال والإجراءات والحزم البرمجية بالمكوث في الذاكرة , بمعني أن الأوراكل لا يحتاج كل مره يتم فيها استخدام العبارة أو الدالة أو الإجراء لأن يراجع الصيغة المكتوبة ويحدد افضل طريقه للتعامل مع البيانات وإنما يتم ذلك مره واحده فقط عند كتابة عبارة SQL أو ترجمة Compile إجراء أو دالة , بعدها يصبح منطق تنفيذ تلك العبارة أو الإجراء أو الدالة موجود في الذاكرة ويكون علي الأوراكل فقط التحقق من مطابقة العبارة بما هو موجود في الذاكرة , ويكون فقط الاختلاف في البيانات المرسلة . وتتكون هذا الجزء من
Shared SQL Area
وهي المساحة الخاصة بعبارات SQL المشتركة التي يتكرر استخدامها .
PL/SQL Procedures and Packages
خاصة بتخزين بيانات برامج PL/SQL والإجراءات والدوال .
عندما يستقبل الأوراكل عبارة جديدة للتنفيذ فإنه يقوم أولا بالتحقق من أنها لا تحوي أخطاء في الصيغة ومن ثم يقوم بوضع مخطط لتنفيذ تلك العبارة يسمي ب مخطط التنفيذ execution plan , ويوضح هذا المخطط الأسلوب الذي سيتبعه الأوراكل في التعامل مع البيانات , مثل هل سيستخدم الفهارس في البحث أم لا , وأي الفهارس سيستخدم ويحدد تكلفة الوصول إلي البيانات ويقوم بتخزينها للمقارنة مع الأساليب الأخرى الممكن إتباعها علي نفس العبارة .
SQL> Select * from tab where tname like '%Go%'
and name !='Stop';
ومن ثم يقوم بوضع العبارات التي قام بتحليل مكوناتها وأسلوب التعامل معها في الذاكرة , وفي حالة الأستخدام المتكرر لنفس العبارة لاحقا فإنه يقوم بالرجوع إلي Library Cashe للحصول علي المعلومات اللازمة لإنجاز تلك العملية , ولذا فإن قاعدة البيانات الجيدة الأعداد هي تلك التي تكون فيها أكبر قدر من العبارات مخزنة في الذاكرة , وقاعدة البيانات السيئة الإعداد هي التي يوجد بها قدر كبير من العبارات والدوال والإجراءات التي تحتاج إلي تحقق من الصيغة والبحث أسلوب تنفيذ جديد مع كل مره يتم فيها استخدام تلك العبارة أو الإجراء أو الدالة, التي تعتمد علي بناء المكونات الأساسية ومن ثم إعادة استخدام المكونات الأساسية في بناء مكونات أخرى وهكذا دواليك .
Dictionary Cashe
يتم في هذا الجزء من Shared Pool تخزين بيانات قاموس البيانات Data dictionary , وهو عبارة عن معلومات عن قاعدة البيانات , فمثلا يتم في تخزين أسماء وهياكل الجداول ونصوص الإجراءات المخزنة والفهارس والأعمدة التي تشملها . ويحتاج الأوراكل إلي تلك البيانات بصفة متكررة , فعوضا عن وضع تلك البيانات في وسائط التخزين فإنه يتم وضعها في هذا الجزء من الذاكرة وذلك بغرض تسريع عملية القراءة والكتابة .
Fixed Portion
هذه القطة من ذكرة SGA ذات حجم ثابت , وهي تعتمد علي الأوراكل المستخدم ونظام التشغيل ولا يمكن تعديل أو تغيير قيمتها
Database Buffer Cashe
عندما يقوم مستخدم الأوراكل بقراءة بيانات من جدول معين , فإن تلك البيانات يتم حفظها في هذا الجزء من الذاكرة وذلك لإحتمال استعلام المستخدم عن تلك البيانات لاحقا , وعليه فإن حفظ اكبر قدر من البيانات الموجودة في ملفات قاعدة البيانات في الذاكرة يسرع عملية التعامل مع البيانات . وعليه فإن هذا الجزء من ذاكرة الأوراكل مختص بالبيانات وحركة البيانات , ووضع أكبر قدر من البيانات في هذا الجزء من الذاكرة هو الأفضل , وبالطبع سيكون من الأفضل لو تمكنا من وضع كل البيانات الموجوده في ملفات قاعدة البيانات في هذا الجزء من الذاكرة , ولكن في أغلب الأحيان يكون ذلك غير ممكن بسبب محدودية موارد الجهاز " الذاكرة RAM ولذا فإنه يجب إدارة هذاط في هذا الجزء من الذاكرة بحيث يتم إعطاء الأولوية للبيانات الأكثر طلبا والأكبر حجما , ويمكن القيام بذلك عند الحاجة من خلال تخصيص استخدام المساحات الإختيارية الأخري وهي :
Keep Buffer
Recycle Buffer
علما بأنه في حالة عدم تخصيص مساحات للجزئين Keep و Recycle فإن كل المساحة المتوفرة من Buffer Cashe يتم شغلها وتكون هي الذاكرة الإفتراضية Default لتخزين البيانات , وفي حالة تخصيص مساحة للأجزاء Keep و Recycle فإن مساحة Buffer Cashe يتم تقسيمها بين الأجزاء الثلاثة حسب الأعداد المطلوب , ويمكن أن نخصص المساحة Keep للبيانات الأكثر حركة وأكثر طلبا بينما نخصص الجزء Recycle للبيانات الأقل حركة والأقل طلبا . لتكون Buffer Cashe كما بالشكل التالي
Large Pool
هذا الجزء من الذاكرة هو اختياري , يمكن إعداد قاعدة البيانات بهذا الجزء من الذاكرة لتخزين بيانات الخادم التشاركي Shared Server أو البيانات المصاحبة لعمليتي النسخ والاسترجاع لقاعدة البيانات , كما يمكن إستخدام هذا الجزء من الذاكرة لإجراء عملية الترتيب Sortingفي حالة تشغيل multi-threaded server (MTS)
Java Pool
هذا الجزء مخصص لإدارة بيانات البرامج والتطبيقات المكتوبة بإستخدام لغة الجافا Java , وهي البيانات الي يديرها مدير ذاكرة الجافا JVM .
Redo Log Buffer
يتم هنا حفظ التعديلات التي تتم في قاعدة البيانات قبل كتابتها في ملفات الأرجاع
Program Global Area (PGA)
يقوم بإنشاء ذاكرة PGA لكل عملية من عمليات الخادم Server Process Server Process وهي تستخدم في معالجة عبارات SQL وبيانات الأتصال Logon والبيانات المتعلقة بجلسة العمل الخاصة بها . فنجد أن هنالك عدد من PGA تعمل معا , وتدير البيانات التي ذكرناها سابقا , ومجموعها جميعها يكون هو الذاكرة الأجمالية للهيئة وتسمي Instance PGA . وتتكون هذه الذاكرة من
Session Memory
Private SQL Area
Session Memory
يتم إستخدام هذا الجزء من PGA في حفظ بيانات الإتصال Login الخاصة بجلسات العمل session .
Private SQL Area
هذا الجزء معني بحفظ البيانات المتعلقة بعبارات SQL مثل قيم المتغيرات المرتبطة Bind Variables Values أو حالة تنفيذ الإستعلام ومنطقة عمل الإستعلام . كل جلسة عمل session لها جزء خاص بها في هذا الجزء من الذاكرة , وكل مستخدم يقوم بكتابة عبارة SQL تكون له مساحة محددة في هذه الذاكرة , لذا فإنه من الممكن وجود عدد كبير من قطة الذاكرة من النوع Private SQL Area .
يعتمد مكان وجود هذا الجزء من الذاكرة علي أسلوب الإتصال الذي ترتب عليه تنفيذ جملة SQL فإن كانت جلسة العمل التي نفذت العبارة متصلة علي خادم مخصص Dedicated Server فإن ذاكرة هذه العبارة توجد بالكامل في PGA أما إن كانت العبارة متصلة علي خادم تشاركي Shared Server فإن جزء من هذه ذاكرة العبارة تكون موجوده في SGA.