همانطور که پیشتر به آن اشاره شد ساختار منطقی دسترسی کاربران را به ساختار فیزیکی ممکن می سازد. در حقیقت ساختار منطقی Data Base از دو واحد اساسی تشکیل شده است:
- حافظه SGA یا همان System Global Area
- حافظه PGA یا همان Program Global Area
پردازشات خود بانک اطلاعاتی و Cashe کردن داده ها در حافظه SGA انجام می پذیرد، این حافظه بین تمام کاربران بانک اطلاعاتی مشترک میباشد.
نکته: اوراکل تنها یکبار اطلاعات رو از DataFile میخواند و در فضای SGA کش میکند.
در این حافظه سه ناحیه مهم وجود دارد:
- Shared Pool Buffer: در این ناحیه کدهای PL-SQL، SQL و Data Dictionary قرار دارد.
- Java Pool Buffer: در این ناحیه اشیا جاوایی همانند اشیایی که توسط SQL-J تولید می شوند قرار دارد.
-
Data Cache Buffer: در هنگام بالا آمدن بانک اطلاعاتی این فضا خالی بوده و در هنگام اجرای اولین پرس و جو توسط کاربر این فضا پر خواهد شد. اطلاعاتی که در این فضا وارد میشود همان اطلاعات مربوط به خروجی دستور SQL کاربر است، که البته این اطلاعات به صورت فیلتر نشده (بدون توجه به دستور WHERE) میباشد. بعد از پر شدن این بافر در صورتی که کاربر دیگری بر روی جدول مذکور SELECT زند، بانک اطلاعاتی اوراکل دیگر به Data File رجوع نمیکند و اگر در این هنگام اطلاعاتی بر روی جدول مذکور وارد گردد، این اطلاعات ابتدا بر روی Data Cashe Buffer سوار شده، سپس تغیرات مورد نیاز بر روی Data File اعمال میشود.
پردازشات مربوط به دستورات SQL کاربر در فضای PGA انجام میشود به طور مثال زمانی که کاربر بواسطه یک دستور SQL داده هایی را Filter میکند پردازش مربوط به این فیلتر در فضای PGA انجام خواهد شد.
به عنوان مثال: تمامی رکوردهای جدول کارمندان را میخوایم که سن آنها از ۲۰ سال کمتر است. بعد از نوشتن این SELECT اصلاً به قسمت شرط ما (که) کاری نداره و میره کل DataFile ای که مربوط به جدول کارمندان است رو میاره رو فضای SGA (کش رو در فضای SGA انجام میده و به where کاری نداره) بعد پردازش where دستور را به فضای PGA میآورد (این فضا بین کاربران مشترک نیست و هر کاربری این فصا رو به صورت private داره)
خوبی این کار این است که فقط در SELECT اول مربوط به جدول کل اطلاعات در RAM بالا میآید و در SELECT های بعدی با شرطهای مختلف فقط فضای PGA تغییر میکند و سرعت پاسخ به کوئریهای ما به شدت بالا میرود.
در ویرایشهای جدید اوراکل یعنی از Oracle 11g R2 به یعد مدیریت حافظه SGA و PGA به صورت خودکار انجام میپذیرد برای فعالسازی مدیریت خودکار SGA و PGA مقدار حافظه آن را می توان به صفر کاهش داد تا Oracle Memory Manager مدیریت فضای SGA و PGA را عهده دار شود. برای کسب اطلاعات در مورد فضای SGA میتوان از دستور ذیر در محیط sqlplus استفاده کرد:
SHOW SGA;
برای کسب اطلاعات در مورد فضای PGA نیز میتوان از دستور ذیر استفاده کرد:
SELECT MAX(PGA_USED_MEM) , MAX (PGA_MAX_MEM) FROM V$PROCESS
برای کسب اطلاعات در مورد نمونه یا همان ساختار منطقی بانک اطلاعاتی میتوان از دستور ذیر استفاده کرد:
SELECT INSTANCE_NUMBER , INSTANCE_NAME , HOST_NAME , VERSION , STARTUP_TIME , STATUS , INSTANCE_ROLE FROM V$INSTANCE;
نکته: زمانی که INSERT میکنید INSERT در فضای PGA و Redo LOG تاثیر خودش رو میذاره و وقتی Commit رو انجام میدید INSERT به SGA و DataFile منتقل میشه (منظور این است که در زمان Commit اطلاعات از PGA به SGA منتقل میشه و تا زمانی که INSERT رو Commit نکنید اطلاعات فقط تو فضای PGA موجوده (فقط خود کاربر به آن دسترسی دارد) ولی وقتی Commit میکنید چون فضای SGA مشترک است همه کاربران به آن دسترسی دارند پس اطلاعات در DataFile ها نوشته شدهاند.)
نکته: بعد از هر Commit در فضای PGA فقظ تغییرات آن Commit در فضای SGA به کش اضافه خواهد شد. (فرض کنید کش در فضای SGA مانند یک آرایه است که بعد از هر Commit در فضای PGA به آن آرایه یک خانه اضافه میشود)