مدیریت خودکار حافظه (MMA)در پایگاه‌داده اوراکل  نسخه 11      

     اوراکل گام‌های بلندی در ساده‌سازی مدیریت حافظه در چند نسخه اخیر از پایگاه‌داده برداشته است .

اوراکل نسخه 9i مدیریت  PGA را به طور خودکار از طریق معرفی پارامتر  PGA_AGGREGATE_TARGET  انجام می دهد

اوراکل 10g این روند را با خودکار کردن مدیریت SGA   با استفاده از پارامتر SGA_TARGET انجام

 داده.

اوراکل 11g این یک مرحله را با اجازه دادن به شما برای تخصیص یک تکه از حافظه به کار می‌برد، که اوراکل از آن برای مدیریت پویا هم SGA  و هم  PGAاستفاده می‌کند.

 در زمان نوشتن این مستند  مدیریت حافظه خودکار (AMM) تنها بر روی سیستم عامل های اصلی پشتیبانی می‌شود:

 (Linux, Solaris, Windows, HP-UX, AIX)

     راه آسان جهت مدیریت حافظه در دیتابیس اوراکل این است که آن را به AMM واگذار کنیم. به همین جهت باید دو پارامتر MEMORY_TARGET و MEMORY_MAX_TARGET را تنظیم کنید.

     AMM به صورت خودکار SGA و PGA را بر اساس نیاز دیتابیس و بالانس کاری تنظیم می کند به صورتی که جمع مقدار حافظه ­ای که به این دو تخصیص میدهد برابر با مقدار MEMORY_TAGET  می شود. به این نکته توجه داشته باشید که AMM مقدار MEMORY_TARGET را تغییر نمی­دهد و در صورتی که نیاز داشته باشید خود شما باید مقدار این پارامتر را تغییر بدهید. (حداکثر به اندازه MEMORY_MAX_TARGET)

     تغییر پارامتر MEMORY_TARGET به صورت داینامیک انجام می شود و احتیاجی به ریست کردن دیتابیس نیست با استفاده از دستور زیر

ALTER SYSTEM SET MEMORY_TARGE=nM ;

اما در صورتی که بخواهید مقدار پارامتر MEMORY_MAX_TARGET را تغییر بدهید باید دیتابیس را یکبار خاموش رو روشن کنید.

ALTER SYSTEM SET MEMORY_MAX_TARGET=nM scope=spfile;

برای اینکه مدیریت حافظه را به حالت manual تغییر بدهید دستور زیر را اجرا کنید:

ALTER SYSTEM SET MEMORY_TARGET=0;

 در زمانی که سیستم در مد AMM باشد مقادیر زیر برقرار است:

ALTER SYSTEM SET SGA_TARGET=0;

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0;

همانطور که ابتدای متن گفته شد این مقادیر به صورت اتوماتیک مقدار دهی می­شوند.

     جدول V$MEMORY_TARGET_ADVICE مقدار توصیه شده از سوی اوراکل برای پارامتر MEMORY_TAGET را نشان می دهد. به شکل زیر توجه کنید:

memory target

  

     خروجی جدول زیر به این صورت تفسیر می­شود که مقدار 1 در ستون MEMORY_SIZE_FACTOR نمایانگر مقدار اکنون MEMORY_TARGET است و دیگر مقادیر را اگر در مقدار حافظه در این حالت ضرب کنیم مقدار ستون حافظه بدست می آید. همچنین ستون ESTD_DB_TIME نمایانگر مدت زمان دیتابیس برای تکمیل کردن بارکاری خود می باشد. اگر مقدار حافظه را در این مثال از 360مگابایت  که مقدار اکنون است به مقدار 450 مگابایت تغییر دهیم مدت زمانی که دیتابیس برای انجام بارکاری می­خواهد از 341 به 335 تغییر می­کند و افزایش MEMORY_TARGET به بیشتر از این مقدار تاثیری در زمان تمام کردن کار نخواهد گذاشت.

     هنگامی که تغییرات را اعمال کردید و دیتابیس را خاموش و روشن کردید ممکن است با خطای زیر مواجه شوید:

ORA_00845: MEMORY_TARGET not supported on this system but memory size seems to be fine

 این خطا بیان گر این است که اندازه حافظه سیستم شما ایرادی ندارد ولی مقدار shared memory file system کافی نیست و باید به اندازه memory_max_target تغییر پیدا کند.

برای این حالت باید به صورت زیر عمل کنید:

در صورتی که مقدار MEMORY_MAX_TARGET را نمی دانید به PFILE در مسیر $ORACLE_HOME/dbs/initINSTANCENAME.ora مراجعه کنید و مقدار را بدست آورید. سپس با دستور زیر اندازه /dev/shm را تغییر دهید:

$ df -h /dev/shm


$ mount -t tmpfs shmfs -o size=some_value_in_number_with_size /dev/shm

برای مثال:

mount -t tmpfs shmfs -o size=4096m /dev/shm

موفق باشید.

 

منابع:

https://docs.oracle.com/cd/B28359_01/server.111/b28310/memory004.htm#ADMIN11202

https://stackoverflow.com/questions/33366282/oracle-startup-not-possible-ora-00845-memory-target-not-supported-on-this-sys