قابلیت In-Memory Advisor با تحلیل workload دیتابیس تلاش می کند برای In-Memory sizeهای مختلف، DB-Time را تخمین بزند و همچنین می تواند پیشنهاد کند کدام یک از objectها در In-Memory قرار بگیرند.
برای استفاده از این قابلیت، باید از پکیج DBMS_INMEMORY_ADVISE استفاده کرد نحوه اجرای In-Memory Advisor، بسیار مشابه قابلیت Privilege Analysis است و برای گرفتن advise در زمینه In-Memory هم ابتدا باید taskای را start کنیم و زمانی که احساس شد workload دیتابیس به اندازه کافی از دیدگاه In-Memory مورد تحلیل قرار گرفته، این Task را متوقف و نتیجه گزارش را ببینیم.
در ادامه با جزییات بیشتری نحوه ایجاد این گزارش را با هم خواهیم دید.
در قدم اول باید برای استفاده از بسته DBMS_INMEMORY_ADVISE، قابلیت Heat MAP را فعال کنیم:
SQL> exec dbms_inmemory_advise.start_tracking(:task_id); ORA-20000: Heat map is not enabled. ORA-06512: at "SYS.PRVT_DBMS_INMEMORY_ADVISOR", line 1578 ORA-06512: at "SYS.PRVT_DBMS_INMEMORY_ADVISOR", line 1667 ORA-06512: at "SYS.DBMS_INMEMORY_ADVISE", line 191 ORA-06512: at line 1 Help: https://docs.oracle.com/error-help/db/ora-20000/
SQL> ALTER SYSTEM SET HEAT_MAP = ON; System altered.
در قدم بعدی، Taskای را با استفاده از پروسیجر DBMS_INMEMORY_ADVISE.START_TRACKING استارت می کنیم:
PROCEDURE START_TRACKING Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- TASK_ID NUMBER OUT
SQL> variable task_id NUMBER; SQL> exec dbms_inmemory_advise.start_tracking(:task_id); PL/SQL procedure successfully completed. SQL> print task_id TASK_ID ---------- 1
برای تست، workloadای را در دیتابیس شبیه سازی می کنیم:
SQL> declare a number; b number; begin for i in 1..100000 loop select sum(LINE) into a from tbl1; end loop; end; /
در مرحله بعدی، Task را متوقف می کنیم:
SQL> exec dbms_inmemory_advise.stop_tracking; PL/SQL procedure successfully completed.
در پایان برای ایجاد advise پروسیجر dbms_inmemory_advise.generate_advise اجرا می کنیم:
SQL> exec dbms_inmemory_advise.generate_advise; PL/SQL procedure successfully completed.
برای مشاهده خروجی می توانیم از ویوی DBA_INMEMORY_ADVISOR_RECOMMENDATION استفاده کنیم:
select task_id,INMEMORY_SIZE,ESTIMATED_DB_TIME_LOW,ESTIMATED_DB_TIME_HIGH,ESTIMATED_DB_TIME_ANALYTICS_LOW,ESTIMATED_DB_TIME_ANALYTICS_HIGH,to_char(RECOMMENDED_OBJ_LIST) RECOMMENDED_OBJ_LIST from DBA_INMEMORY_ADVISOR_RECOMMENDATION ;
در خروجی می بینیم که اگر جدول TBL1 به In-Memory منقل شود، به چه اندازه از DB_TIME کاسته خواهد شد و همچنین سایز In-Memory هم پیش بینی می شود:
TASK_ID 1 INMEMORY_SIZE 25231360 ESTIMATED_DB_TIME_LOW 75 ESTIMATED_DB_TIME_HIGH 145 ESTIMATED_DB_TIME_ANALYTICS_LO 69 ESTIMATED_DB_TIME_ANALYTICS_HI 139 RECOMMENDED_OBJ_LIST Owner: USEF Table: TBL1 ;