【问题标题】:Oracle In-Memory does not show in v$im-segmentsOracle In-Memory 不显示在 v$im-segments 中
【发布时间】:2019-01-27 07:46:27
【问题描述】:

在数据库中启用 In-Memory 后,我尝试使用 ALTER TABLE EMP INMEMORY; 将表发送到 I-Memory

表被改变了,然后我执行了一个简单的查询来检查表是否真的被改变了。我的查询如下;

SELECT ENAME, COUNT(*)
FROM EMP
WHERE ENAME='JAMES'
GROUP BY ENAME;

查询成功执行,但是当我在 V$IM-SEGMENTS 上执行语句时,没有选择任何行。

如果我没记错的话,当一个表移动到 ORACLE IN-MEMORY 时,所有的段都应该用 V$IM-SEGMENTS 记录。如果是这样,为什么我的查询没有显示在 v$im-segments 中?

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: oracle12c


    【解决方案1】:

    这是因为默认优先级子句"priority none"

    文档说:

    按需人口

    默认情况下,INMEMORY PRIORITY 参数设置为 NONE。在这个 情况下,数据库仅在访问对象时填充对象 通过全表扫描。如果该对象从未被访问过,或者如果它 仅通过索引扫描或按 rowid 获取访问,然后 人口永远不会发生。

    因此,在您的情况下,您需要进行全扫描(选择覆盖表中所有行的查询)以将表填充到内存段中。以下列出了更改的步骤:

    Rem -- Enable table for inmemory
    alter table emp inmemory;
    
    Rem -- Perform full scan
    select count(*) from emp;
    
    Rem -- Sleep for few seconds
    Rem -- This is to ensure segments are fully
    Rem -- loaded into inmemory area before
    Rem -- query v$im_segments
    exec dbms_lock.sleep(30);
    
    Rem -- Now query v$im_segments
    select substr(segment_name,1,20), populate_status, bytes_not_populated from v$im_segments;
    

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2012-03-06
      • 1970-01-01
      • 2021-11-21
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多