
مقدمه : SGA و PGA در اوراکل چه اهمیتی دارد؟
اگر به دنیای پایگاه داده اوراکل (Oracle Database) علاقهمند هستید یا با آن کار میکنید، حتماً اصطلاحات SGA و PGA به گوشتان خورده.
اما واقعاً این دو چی هستن؟ چه تفاوتی دارن؟ چرا درک درست از ساختار حافظه اوراکل اینقدر مهمه؟
توی این مقاله آموزش Oracle Database قراره به زبان ساده و با مثالهای کاربردی، ساختار SGA و PGA رو بهت یاد بدم.
حتی اگر تازهکار باشی، آخر این مقاله دقیق میدونی این دو تا حافظه چی هستن و چه نقشی در عملکرد دیتابیس دارن.
اگر می خواهید در مورد Database Buffer Cache در اوراکل بیشتر آشنا بشید نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
SGA چیست؟ (System Global Area)
SGA حافظهای اشتراکی در Oracle Database هست که تمام کاربران بهش دسترسی دارن.
یعنی اگه چند کاربر به دیتابیس وصل بشن، اطلاعاتی مثل کوئریها و دادههای کش شده، همه توی یه حافظهی مرکزی ذخیره میشن.
اجزای مهم SGA:
- Shared Pool: ذخیره کوئریهای Parse شده و پلانهای اجرایی (Execution Plans)
- Buffer Cache: کش دادههای خواندهشده از دیسک
- Redo Log Buffer: ثبت تغییرات قبل از نوشتن در فایلهای Redo Log
- Large Pool / Java Pool / Streams Pool: برای وظایف خاص مثل اجرای موازی یا برنامههای Java
جزء | توضیح |
---|---|
Shared Pool | ذخیره کوئریهای parse شده و پلانهای اجرایی |
Buffer Cache | حافظه کش برای بلاکهای داده از دیسک |
Redo Log Buffer | ذخیره تغییرات دادهها قبل از نوشتن در redo logs |
Large Pool | برای عملیات موازی و backup/restore |
Java Pool | اجرای کدهای Java در دیتابیس |
Streams Pool | برای replication با استفاده از Oracle Streams |
مثال ساده برای درک بهتر:
فرض کن یه کاربر این کوئری رو اجرا میکنه:
SELECT * FROM employees WHERE department_id = 10;
- دیتابیس بررسی میکنه آیا کوئری قبلاً اجرا شده؟ اگه بله، همون Execution Plan استفاده میشه.
- دادهها از دیسک میاد توی Buffer Cache
- در صورت تغییر، اطلاعات قبل از نوشتن توی فایل Redo، اول میرن توی Redo Log Buffer
PGA چیست؟ (Program Global Area)
PGA حافظهی اختصاصی هر Session یا کاربره.
یعنی هر کسی که به دیتابیس وصل میشه، یه قسمت خصوصی از حافظه داره که فقط خودش میتونه ازش استفاده کنه.
اجزای مهم PGA:
- Sort Area: برای مرتبسازی دادهها (مثل ORDER BY)
- Hash Area: برای عملیات join از نوع hash
- Private SQL Area: اطلاعات کوئریها
- Session Memory: متغیرهای Session، Cursorها، Bind Variableها
جزء | کاربرد |
---|---|
Sort Area | مرتبسازی دادهها برای ORDER BY و GROUP BY |
Hash Area | استفاده در hash joins |
Private SQL Area | اطلاعات اجرای کوئری برای session فعلی |
Session Memory | متغیرها، Cursorها و Bind variableهای session |
مثال واقعی:
فرض کن همون کاربر بخواد این کوئری رو اجرا کنه:
SELECT * FROM employees ORDER BY salary DESC;
مرتبسازی (ORDER BY
) در فضای Sort Area از PGA انجام میشه. این اطلاعات فقط در اختیار همون Session هست.
مقایسه SGA و PGA در Oracle
ویژگی | SGA | PGA |
---|---|---|
نوع حافظه | اشتراکی بین همه کاربران | اختصاصی برای هر session |
مکان اجرا | Instance-level | Session-level |
کاربرد | کَش دادهها و SQL | مرتبسازی، اجرای محلی |
تنظیم حافظه | SGA_TARGET | PGA_AGGREGATE_TARGET |
نکات مهم در مدیریت حافظه Oracle
Oracle به شما این امکان رو میده که مدیریت حافظه رو خودکار (Automatic Memory Management) انجام بدین:
- با تنظیم
MEMORY_TARGET
، Oracle خودش بین SGA و PGA حافظه تخصیص میده. - اگه بخواین دستی تنظیم کنین، باید از
SGA_TARGET
وPGA_AGGREGATE_TARGET
استفاده کنید.
سوالات متداول درباره SGA و PGA در اوراکل
SGA (System Global Area) حافظهای اشتراکی است که بین تمام کاربران دیتابیس مشترک است، در حالی که PGA (Program Global Area) حافظهای خصوصی برای هر کاربر (Session) است.
SGA بیشتر برای کش کردن دادهها و مدیریت SQLهای مشترک استفاده میشود، ولی PGA وظیفه اجرای کوئریهای هر کاربر، مرتبسازی و نگهداری دادههای موقت را برعهده دارد.
برای تنظیم خودکار حافظه میتوان از پارامتر MEMORY_TARGET
استفاده کرد. در تنظیمات دستی، از SGA_TARGET
برای SGA و PGA_AGGREGATE_TARGET
برای PGA استفاده میشود. میتوان این مقادیر را در فایل init.ora
یا با دستور ALTER SYSTEM SET
تنظیم کرد.
Shared Pool یکی از بخشهای اصلی SGA است که شامل SQLهای parse شده، اطلاعات دیتا دیکشنری و پلانهای اجرایی کوئریها میباشد.
استفاده صحیح از Shared Pool باعث افزایش کارایی دیتابیس و کاهش زمان اجرای کوئریهای تکراری میشود.
برای بررسی میزان مصرف حافظه PGA میتوان از ویوی v$pgastat
استفاده کرد. این ویو اطلاعات کاملی درباره میزان حافظه اختصاص داده شده، مصرف شده و درصد موفقیت تخصیصهای حافظه را نشان میدهد. مثال:
SELECT * FROM v$pgastat;
نتیجهگیری : تفاوت SGA و PGA به زبان ساده
- SGA مثل سالن کنفرانس یه شرکت بزرگه. همه توش حضور دارن و اطلاعات به اشتراک گذاشته میشه.
- PGA مثل اتاق شخصیه هر کارمنده. فقط خودش بهش دسترسی داره.
درک درست این مفاهیم نه فقط برای مدیران دیتابیس، بلکه برای برنامهنویسها و تحلیلگرهای داده هم ضروریه.
📢 نظر شما چیست؟ اگر شما هم اطلاعات و تجربه خوبی در مورد Database Buffer Cache دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀
دیدگاهتان را بنویسید