ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

SGA و PGA در Oracle Database چیست؟

مقدمه : 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 دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *