Процесът IMCO (Inmemory Coordinator) се събужда на всеки две минути и проверява дали трябва да бъдат изпълнени някакви задачи за населението. Така че запитването към таблица веднага след активирането й за inmemory не гарантира, че тази заявка ще бъде обслужена от inmemory.
Обектите се попълват в хранилището на IM колони или в приоритизиран списък веднага след отваряне на базата данни или след като таблиците бъдат сканирани (заявени) за първи път.
Например, ако активираме таблица tab1, tab2, tab3 за inmemory:
alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;
Тези таблици влизат в паметта, когато:
- Процесът на IMCO взема тези таблици и ги зарежда в областта на паметта (по реда на приоритета от най-висок към най-нисък:tab2, tab3 и tab1)
- Ако извършим заявка за избор на която и да е от таблиците (пример:
select * from tab1
) преди процесът IMCO да започне (на всеки 2 минути)
За да разберете дали дадена таблица/дял е зареден изцяло в inmemory, можете да направите заявка v$im_segments
изглед по следния начин:
select owner, segment_name, partition_name, segment_type, bytes,
bytes_not_populated, populate_status from v$im_segments;
И така, за да отговоря на въпроса ви:
- Уверете се, че таблицата е заредена в inmemory чрез заявка
v$im_segments
- Ако таблицата не е заредена, изпълнете заявка за избор върху нея, за да бъде заредена в областта на паметта
- Вземете план на заявката за заявката за избор в таблицата, тя трябва да показва INMEMORY като част от плана
Вижте тази бяла книга за повече подробности.