如何从INMEMORY分区收集数据?

时间:2014-10-09 08:41:41

标签: sql oracle in-memory-database oracle12c

我调整Oracle 12c数据库并尝试将一些表加载到INMEMORY分区。所以,我用CRITICAL PRIORITY改变了2个表。但是,当我尝试SELECT内存中的表中的某些数据时,它会从一般的补丁中收集。我从Autotrace那里得到了它。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

IMCO(记忆协调员)进程唤醒every two minutes并检查是否需要完成任何人口任务。因此,在启用内存后立即查询表并不能确保从内存中提供查询。

在数据库打开后或在第一次扫描(查询)表之后,对象将在优先级列表中填充到IM列存储中。

例如,如果我们启用表tab1,tab2,tab3 for inmemory:

alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;

这些表在以下情况下进入内存:

  1. IMCO流程选取这些表并将其加载到内存区域 (按优先顺序最高到最低:tab2,tab3和tab1)
  2. 如果我们在IMCO流程启动之前(每2分钟)对任何表执行选择查询(例如:select * from tab1
  3. 要知道表/分区是否完全加载到内存中,您可以查询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. 确保将表加载到内存中
    3. 如果未加载表,请执行select查询以使其成为可能 加载到内存区域
    4. 获取选择查询的查询计划 表,它应该显示INMEMORY作为计划的一部分
    5. 查看此whitepaper了解详情。