در مطالب قبلی در مورد instance اوراکل صحبت کردیم و گفتیم که instance از فرایندهای پس زمینه و فضای SGA تشکیل شده است. فرایندهای اوراکل از دو دسته فرایند پس زمینه (background process) و فرایند سرور (server process) تشکیل شده است. هر یک از فرایندهای پس زمینه یکی از عملیات های پایگاه داده را انجام می دهد و فرایند سرور واسطه برقراری ارتباط میان کلاینت و سرور است.

اوراکل به طور معمول به ازای هر اتصال از کلاینت یک فرایند سرور ایجاد می کند و سپس به این فرایند یک فضای حافظه اختصاصی می دهد که شامل داده ها و اطلاعات کنترلی است که توسط فرایند سرور استفاده می شود. نام این فضا PGA یا Program Global Area است.

در مقابل فرایند سرور، فرایند کلاینت (client process) وجود دارد که از سمت کلاینت آغاز کننده ارتباط است. کلاینت از طریق فرایند کلاینت، دستورهای sql را به فرایند سرور ارسال می کند. سپس فرایند سرور نتیجه را آماده و به فرایند کلاینت ارسال می کند.

شکل زیر (شکل ۱) ساختار PGA را نشان می دهد. به یاد داشته باشید که به هر فرایند سرور، یک PGA اختصاص داده می شود. PGA جایی است که فرایند سرور دستورهای sql را اجرا می کند و نتیجه را در آن نگه می دارد.

۱ – Private SQL Area

در مطلب معماری اوراکل – ساختار SGA – بخش دوم پیوند میان SQL Shared Area و Private SQL Area را بازگو کردیم و گفتیم که شاید چندین ناحیه Private SQL Area در PGA به یک SQL Shared Area اشاره داشته باشند. هرگاه که یک نشست فرمان SQL را می فرستد، یک Private SQL Area به آن داده می شود.

۲ – Session Memory

جلسه (یا session) وضعیت یک کاربر در حال حاظر متصل شده به یک instance را نشان می دهد. گفتیم که اتصال به instance از طریق ارتباط میان فرایند کلاینت با فرایند سرور آغاز می شود. به طور مثال زمانی که کاربر از طریق حساب کاربری خود (نام کاربری و گذرواژه) و از طریق ابزاری مانند SQL*PLUS با سرور اوراکل، و در واقع با فرایند سرور ارتباط برقرار می کند، یک جلسه یا session ایجاد می شود.

session memory نیز می نامند ناحیه ای است که متغیرهای جلسه (session variables) و دیگر اطلاعات مرتبط با جلسه را در خود نگه می دارد. در مطلب بعدی در مورد دو مفهوم deticated server و shared server صحبت می کنیم.

در حالت deticated server به ازای هر فرایند کلاینت دقیقا یک فرایند سرور پاسخ گو است. در این حالت یک فضای session memory خصوصی برای جلسه ایجاد می شود. ولی در حالت shared server به ازای هر چند فرایند کلاینت، یک فرایند سرور پاسخ گو است. در این حالت فضای session memory به صورت اشتراکی بوده و دیگر برای هر فرایند سرور به صورت خصوصی نیست.

در شکل زیر (شکل ۳) می بینید که سه PGA وجود دارد پس اوراکل در حالت deticated server است زیرا به ازای هر یک از کلاینت های فرزند، یک فرایند سرور ایجاد شده و به هر فرایند سرور نیز یک PGA تعلق گرفته است.

۳ – SQL Working Areas

زمانی که فرایند سرور بخواهد کوئری های پیچیده مانند hash join یا مرتب سازی را انجام دهد، به فضای حافظه نیاز دارد. برای انجام اینگونه موارد، در زمان اجرای کوئری، درون PGA یک سری نواحی به نام SQL Working Areas ایجاد می شود. در شکل می بینید که این نواحی به طور مثال برای عملیات مرتب سازی ایجاد شده اند. نکته مهم این است که فضای SQL Working Area باید بسیار کافی باشد تا فرایند سرور بتواند عملیات را بر روی داده ها انجام دهد. بنابراین اگر فضا کافی نباشد، باعث طولانی شدن تهیه نتیجه و از این رو باعث کاهش کارایی (performance) پایگاه داده می شود.

بنابراین SQL Working Areas ناحیه ای است که در آن عملیات های بسیار وابسته و حیاتی به حافظه اجرا می شوند. در شکل ۱ چندین مورد از این عملیات ها نشان دادخ شده اند. به هر عملیات بخشی از SQL Working Areas اختصاص داده می شود. در ادامه تعدادی از عملیات ها فهرست شده اند:

  • hash join
  • sorting
  • bitmap merge
  • bitmap create

اگر مطلب معماری اوراکل – ساختار SGA – بخش دوم را به یاد داشته باشید، گفتیم که درون shared pool یک ناحیه به نام library cache وجود دارد. درون خود library cache یک ناحیه مهم به نام shared sql area وجود دارد که کدهای مربوط به دستورهای sql در آن نگهداری می شود. شکل زیر (شکل ۲) نمای shared pool را نشان می دهد. هدف از فضای shared sql area برای این بود که ممکن است لازم باشد تا یک دستور sql چندین بار اجرا شود و این زمانی رخ می دهد که چندین کاربر بخواهند یک دستور مشابه را اجرا کنند.