20200208-Oracle 12C新特性In-Memory

在这里插入图片描述

In-Memory 是12C 开始,在 SGA 中新增加的内存区域,可以实现表数据按列存储;
In-Memory 并没有取代传统的Buffer Cache ,二者并存在 SGA 中。
在这里插入图片描述
SGA是动态区域,In-Memory大小是静态的,需要DBA手动维护。
在这里插入图片描述 列式存储数据和行式存储数据各有优缺点,适用场景不同。
列式存储在访问多行、少列情况下性能更优。
在这里插入图片描述

在这里插入图片描述
下面启用 inmemory , 进行性能测试。

一 数据库版本为19C( 相当于 12.2.0.3 版本 )

SQL> select banner_full from v$version;
BANNER_FULL
---------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

二 查看 inmemory 是否启用

SQL> show parameter inmemory_size
NAME          TYPE  VALUE
------------------------------------ ----------- ------------------------------
inmemory_size        big integer 0

三 创建测试数据

SQL> conn cjc/cjc@cjcpdb
SQL> create table t1 as select * from dba_objects;
SQL> select count(*) from t1;
  COUNT(*)
----------
     72482

四 启用 in - memory ( 实例级别 )

SQL> show parameter inmemory_size
NAME          TYPE  VALUE
------------------------------------ ----------- ------------------------------
inmemory_size        big integer 0

SQL> alter system set inmemory_size=300M scope=spfile;

SQL> shutdown immediate
SQL> startup
ORACLE instance started.
Total System Global Area 1287650440 bytes
Fixed Size       9145480 bytes
Variable Size     759169024 bytes
Database Buffers   201326592 bytes
Redo Buffers       3436544 bytes
In-Memory Area   314572800 bytes
Database mounted.
Database opened.

SQL> show parameter inmemory_size
NAME          TYPE  VALUE
------------------------------------ ----------- ------------------------------
inmemory_size        big integer 300M

五 性能对比

5.1 收集 T1 表统计信息

SQL>  EXEC DBMS_STATS.GATHER_TABLE_STATS('CJC','T1',estimate_percent=>100,CASCADE=> TRUE);
PL/SQL procedure successfully completed.

查看执行计划

SQL> set autotrace on

在这里插入图片描述

5.2 对表 t1 启用 inmemory

SQL> conn sys/oracle@cjcpdb as sysdba
Connected.
SQL> alter table cjc.t1 inmemory;

禁用 alter table cjc.t1 no inmemory;

5.3 收集统计信息

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('CJC','T1',estimate_percent=>100,CASCADE=> TRUE);

5.4 查看执行计划

SQL> set autotrace on
SQL> select count(object_id) from t1;
COUNT(OBJECT_ID)
----------------
   72481

在这里插入图片描述

T1 表启用 inmemory 后 ,consistent gets 由 1412 降到 2 , Cost 由 392 降到 16 ,性能提升比较明显。

六 查询相关信息

 V$INMEMORY_AREA 、 V$IM_SEGMENTS 、V$IM_COLUMN_LEVEL

SELECT NAME, VALUE / (1024 * 1024 * 1024) "SIZE_IN_GB"
  FROM V$SGA
 WHERE NAME LIKE '%Mem%';

在这里插入图片描述

SELECT   POOL ,
       TRUNC ( ALLOC_BYTES /   ( 1024   *   1024   *   1024 ),   2 )  "ALLOC_GB" ,
       TRUNC ( USED_BYTES /   ( 1024   *   1024   *   1024 ),   2 )  "USED_GB" ,
      POPULATE_STATUS
  FROM  V$INMEMORY_AREA ;

在这里插入图片描述

SELECT  OWNER ,
    SEGMENT_NAME ,
    bytes ,
    INMEMORY_SIZE ,
    POPULATE_STATUS ,
    BYTES_NOT_POPULATED
FROM  V$IM_SEGMENTS ;

在这里插入图片描述

 SELECT table_name,
       segment_column_id,
       column_name,
       inmemory_compression
  FROM v$im_column_level;

在这里插入图片描述

七 注意事项

1 inmemory_size 不能小于 100M

SQL> startup
ORA-64353: in-memory area size cannot be less than 100MB

2 指定表在启用或禁用 inmemory 时,要及时收集统计信息
否则执行计划里的信息是不准确的。

详细信息可以参考官方文档

https://docs.oracle.com/en/database/oracle/oracle-database/19/inmem/intro-to-in-memory-column-store.html#GUID-BFA53515-7643-41E5-A296-654AB4A9F9E7

欢迎关注我的微信公众号"IT小Chen"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值