در مطلب معماری اوراکل – ساختار SGA – بخش نخست مفهوم SGA را شروع به آموزش دادن کردیم و چندین مولفه از آن را توضیح دادیم. shared pool یکی دیگر از مولفه های SGA است که در این مطلب می خواهیم در مورد آن صحبت کنیم. شکل زیر (شکل ۱) نشان می دهد که در shared pool کدام اطلاعات قرار دارند. به طور کلی shared pool شامل موارد زیر می شود:

۱ – library cache

۲ – data dictionary cache

۳ – sql یا sql query result cache

۴ – pl/sql function result cache

بنابراین خود مولفه shared pool شامل زیر مولفه هایی هستند که در بالا آنها را فهرست کردیم. در ادامه هر یک از زیر مولفه های فهرست شده را توضیح خواهیم داد.

 

۱ – Library Cache

طبق مستندات اوراکل، library cache شبیه به buffer cache است با این تفات که buffer cache داده ها را نگه می دارد ولی library cache محلی برای نگهداری برنامه های sql pl/sql و کلاس های جاوا است. Library Cache بخشی از فضای SGA در حافظه اصلی است که اوراکل آن را برای نگهداری یک عبارت SQL (یا SQL Statement) به کار می برد. انجام شدن یک فرمان SQL چندین گام را دنبال می کند. زمانی که یک فرایند، فرمان SQL را می فرستد، نخستین کاری اکه انجام می شود، کپی شدن متن فرمان SQL به درون ناحیه Library Cache از SGA است، سپس این متن کپی شده، پردازش شده تا درستی آن بررسی شود.

به عبارت ساده library cache یکی از زیر مولفه های shared pool است که اوراکل از آن برای کَش کردن دستورهای sql و pl/sql استفاده می کند. هر زمان که یک دستور sql – pl/sql اجرا شود، یک کپی از متن این دستور به درون library cache وارد می شود. هدف از این کار این است که بررسی شود که آیا دستور معتبر است یا نه؟

به طور مثال فرض کنید دستور زیر را اجرا می کنید. library cache بررسی می کند که آیا جدولی به نام users با ستون های name و address وجود دارد. همچنین بررسی می شود که آیا کاربری که دستور را ارسال کرده آیا مجوز لازم برای اجرای دستور را دارد. همین مواردی که برای sql گفته شد، برای pl/sql نیز صادق است

در شکل بالا که نمای همه گیری از SGA را نشان می دهد، می توانید زیر بخش Library Cache را ببینید. توجه کنید که هدف از کَش (Cache) نگهداری شی ها و داده هایی هستند که به تازگی به کار رفته اند و برای زمانی درون حافظه نگهداری می شوند. خود ناحیه Library Cache به فضای نام هایی (Namespaces) تقسیم می شود که برای نمایش این فضاهای نام می توانید فرمان SQL را را انجام دهید.

SQL Shared Area یک ناحیه درونی ( و یکی از فضاهای نام Library Cache) است که تمامی کاربران می توانند به آن دسترسی داشته باشند. SQL Shared Area شامل Parse Tree و Exection Plan است. برای یک عبارت SQL تنها یک SQL Shared Area وجود دارد. هر نشست (Session) که یک عبارت SQL را می فرستد، در ناحیه PGA (یا Program Global Area) دارای یک Private SQL Area است.

هر کاربری که عبارت همسان SQL را بفرستد، آن عبارت SQL دارای یک Private SQL Area به یک SQL Shared Area دارد. بنابراین هر کدام از Private SQL Area ها در PGA های جدا از هم، می توانند به یک ناحیه SQL Shared Area همسان اشاره داشته باشند. شکل زیر نمای همه گیری از آن چه که گفتیم را نشان می دهد و می بینید که دو Private SQL Area درون دو PGA جدا از هم در دو نشست (Session) متفاوت، به یک SQL Shared Area اشاره دارند.

۲ – Data Dictionary Cache

تعریف Data Dictionary

پیش از مطرح کردن data dictionary cache باید خود data dictionary را تعریف کنیم. به بیان ساده data dictionary (که از این پس آنرا دیتا دیکشنری می گوییم)، مجموعه ای از جدول ها و نماهایی (views) است که اطلاعاتی در مورد پایگاه داده، ساختار پایگاه داده و کاربران را نگهداری می کنند.

در طول این دوره و دوره های بعدی و تا حد ممکن سعی کرده ایم که این جداول و نماها را در هر مطلب معرفی کنیم. شما به عنوان یک مدیر با دیتا دیکشنری بسیار سروکار دارید. چیزی که بسیار مهم است این که جدول ها و نماهای درون دیتا دیکشنری به هیچ عنوان به صورت مستقیم توسط مدیرها بروز یا تغییر نمی شوند، بلکه خود اوراکل آنها را مدیریت می کند.

data dictionary cache محلی از shared pool است که داده های دیتا دیکشنری را در خود نگه می دارد. اوراکل به صورت مداوم به دیتا دیکشنری احتیاج دارد بنابراین سطرهایی از جداول و نماهای دیتا دکشنری درون فضای data dictionary cache ذخیره و کَش می شوند تا پاسخ گوی درخواست های بعدی باشند.