
اگر با Oracle Database کار میکنید، احتمالاً بارها شنیدهاید که تنظیم صحیح Memory چقدر در سرعت و عملکرد سیستم تأثیر دارد. مدیریت حافظه در اوراکل یکی از مهمترین مباحث Performance Tuning محسوب میشود و اگر درست انجام نشود، سیستم دچار کندی، افزایش I/O، مصرف بالای CPU و خطاهای پرتکراری مثل ORA-04031 و ORA-04030 خواهد شد.
در این مقاله آموزش Oracle در بخش آموزش معماری اوراکل ، توضیح میدهم که Memory Management دقیقاً چیست، چگونه کار میکند، چه انواعی دارد و بهترین روش تنظیم آن چیست.
گر با دیتابیس Oracle کار میکنی—چه به عنوان برنامهنویس، چه DBA—حتماً اسم Shared Pool را زیاد شنیدی.
Shared Pool یکی از حیاتیترین بخشهای حافظه SGA است و دقیقاً همان جایی است که میتواند سرعت اجرای SQL را چند برابر کند یا برعکس، اگر درست مدیریت نشود، سیستم را کند و سنگین کند.
پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.
در این مقاله شما می خوانید
Memory Management در Oracle یعنی چه؟
Memory Management یعنی نحوه تخصیص و مدیریت حافظه بین بخشهای مختلفی که Oracle برای اجرای Query و پردازش دادهها نیاز دارد.
اوراکل حافظه را به دو بخش اصلی تقسیم میکند:
- SGA (Shared Global Area)
- PGA (Program Global Area)
این دو بخش هسته اصلی عملکرد دیتابیس را تشکیل میدهند.
SGA چیست؟ (Shared Global Area)
SGA بخش اشتراکی حافظه است و همه سشنها از آن استفاده میکنند.
اجزای اصلی SGA:
- Database Buffer Cache
- Shared Pool
- Redo Log Buffer
- Large Pool
- Java Pool
- Streams Pool
۱. Database Buffer Cache
بلوکهای دادهای که از دیسک خوانده میشوند در این بخش ذخیره میشوند.
پارامتر تنظیم:
DB_CACHE_SIZE
مثال:
ALTER SYSTEM SET DB_CACHE_SIZE = 2G;
۲. Shared Pool
جایی که اوراکل SQLهای Parse شده و Data Dictionary را ذخیره میکند.
پارامتر تنظیم:
SHARED_POOL_SIZE
مثال:
ALTER SYSTEM SET SHARED_POOL_SIZE = 800M;
PGA چیست؟ (Program Global Area)
PGA حافظه اختصاصی هر Session است و شامل موارد زیر میشود:
- Sort
- Hash Join
- Bitmap Merge
- Private SQL Area
اگر مقدار آن کم باشد، عملیات Sort روی دیسک انجام میشود و سیستم افت سرعت شدیدی پیدا میکند.
پارامتر اصلی:
PGA_AGGREGATE_TARGET
مثال:
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 1G;
انواع روشهای مدیریت حافظه در Oracle
اوراکل سه مدل مدیریت حافظه دارد:
۱. Manual Memory Management
در این روش همه پارامترها دستی تنظیم میشوند.
مثلاً:
DB_CACHE_SIZE
SHARED_POOL_SIZE
LARGE_POOL_SIZE
PGA_AGGREGATE_TARGET
مزایا:
- کنترل کامل
معایب:
- نیاز به تجربه بالا
- احتمال خطا زیاد
۲. ASMM (Automatic Shared Memory Management)
در این روش، ما مقدار SGA را مشخص میکنیم و Oracle خودش آن را بین بخشهای مختلف تقسیم میکند.
مثال:
ALTER SYSTEM SET SGA_TARGET = 4G;
۳. AMM (Automatic Memory Management)
⭐ بهترین و آسانترین روش
در این حالت تنها MEMORY_TARGET را مشخص میکنیم و Oracle بهصورت هوشمند آن را بین SGA و PGA توزیع میکند.
مثال:
ALTER SYSTEM SET MEMORY_TARGET = 6G;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 6G;
مزایا:
- بسیار ساده
- هوشمند
- مناسب اکثر محیطهای عملیاتی
مثال از تنظیم memory
سناریو:
- سرور: ۱۶GB RAM
- کاربران: حدود ۱۰۰ کاربر همزمان
- استفاده فقط برای Oracle
پیشنهاد:
- OS → ۴GB
- Oracle → ۱۲GB
تنظیم:
ALTER SYSTEM SET MEMORY_TARGET = 10G;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 10G;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;
خطاهای رایج حافظه در Oracle
ORA-04031
کمبود حافظه Shared Pool
راهحل:
ALTER SYSTEM SET SHARED_POOL_SIZE = 1G;
یا فعالسازی AMM
ORA-04030
کمبود PGA
راهحل:
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G;
بررسی Buffer Cache Hit Ratio
SELECT
(۱ - (phy.value / (cur.value + con.value))) * 100 "Buffer Cache Hit Ratio"
FROM
v$sysstat phy,
v$sysstat cur,
v$sysstat con
WHERE
phy.name = 'physical reads'
AND cur.name = 'db block gets'
AND con.name = 'consistent gets';
اگر کمتر از ۹۰ باشد یعنی Cache کم است.
سوالات متداول درباره Memory Management در اوراکل
حدود ۶۰ تا ۷۰ درصد کل RAM سیستم.
AMM سادهترین و کاربردیترین روش است.
وقتی نیاز به کنترل دقیق جزئیات داریم.
Parse زیاد، CPU بالا، خطای ORA-04031.
Sort روی دیسک انجام میشود → سیستم کند میشود.
جمعبندی
- استفاده از AMM (اگر نسخه اوراکل اجازه دهد)
- بررسی منظم AWR Report
- مانیتورینگ Memory با V$ views
- تنظیم مقادیر بر اساس بار واقعی سیستم
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید