2014-10-09 83 views
1

我调整Oracle DB 12C,并试图某些表加载到INMEMORY分区。所以,我用CRITICAL PRIORITY修改了2个表格。但是,当我试图从内存中的表SELECT一些数据,它可从一般patition。我从Autotrace中获得了它。如何从INMEMORY分区收集数据?

我在做什么错了?

回答

1

海事协商组织(Inmemory协调员)进程被唤醒every two minutes和检查,看看是否有人口的任务需要完成。因此,使它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; 

这些表进入inmemory时:

  1. IMCO过程拿起这些表,并加载它们进入inmemory区域 (优先higest到最低的顺序:TAB2,TAB3和TAB1)
  2. 如果我们在任何表(例如:select * from tab1)的执行选择查询在IMCO过程中踢之前(在前夜RY 2分钟)

要知道,如果一个表/分区被完全加载到inmemory可以查询v$im_segments观点类似以下内容:

select owner, segment_name, partition_name, segment_type, bytes, 
bytes_not_populated, populate_status from v$im_segments; 

因此,要回答你的问题:

  1. 确保表是通过查询v$im_segments
  2. 如果表没有加载在其上执行SELECT查询语句,使之装入inmemory装入inmemory区域
  3. 获取查询计划在 表的SELECT查询,它应该显示INMEMORY作为该计划的一部分

检查这个whitepaper了解更多详情。