Oracle 12C新特性In-Memory

Oracle 12C 新特性 In-Memory

In-Memory 是12C 开始,在 SGA 中新增加的内存区域,可以实现表数据按列存储;

In-Memory 并没有取代传统的Buffer Cache ,二者并存在 SGA 中。

Oracle 12C新特性In-Memory

SGA是动态区域,In-Memory大小是静态的,需要DBA手动维护。

Oracle 12C新特性In-Memory

列式存储数据和行式存储数据各有优缺点,适用场景不同。

列式存储在访问多行、少列情况下性能更优。

Oracle 12C新特性In-Memory

Oracle 12C新特性In-Memory

下面启用 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

Oracle 12C新特性In-Memory

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

Oracle 12C新特性In-Memory

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%';

Oracle 12C新特性In-Memory

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 ;

Oracle 12C新特性In-Memory

SELECT  OWNER ,

       SEGMENT_NAME ,

       bytes ,

       INMEMORY_SIZE ,

       POPULATE_STATUS ,

       BYTES_NOT_POPULATED

   FROM  V$IM_SEGMENTS ;

Oracle 12C新特性In-Memory

SELECT table_name,

       segment_column_id,

       column_name,

       inmemory_compression

  FROM v$im_column_level;

Oracle 12C新特性In-Memory

七 注意事项

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

Database In-Memory Guide

Introduction to Oracle Database In-Memory

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

Oracle 12C新特性In-Memory

Oracle 12C新特性In-Memory


相关文章

这篇文章主要介绍“hive和mysql的区别是什么”,在日常操作中...
这篇“MySQL数据库如何改名”文章的知识点大部分人都不太理解...
这篇文章主要介绍“mysql版本查询命令是什么”的相关知识,小...
本篇内容介绍了“mysql怎么修改字段的内容”的有关知识,在实...
这篇文章主要讲解了“mysql怎么删除unique约束”,文中的讲解...
今天小编给大家分享一下mysql怎么查询不为空的字段的相关知识...