签到成功

知道了

CNDBA社区CNDBA社区

Oracle 18c新特性-Memoptimized Rowstore(内存优化的行存储)

2018-08-06 15:22 2512 0 原创 Oracle 18c
作者: Expect-乐

1.      说明

         从18c开始支持Memoptimized Rowstore,可用于提高查询性能。针对频繁基于主键查询的SQL语句的性能提高十分明显。

         其是通SGA中的已一块存储区,叫memoptimize pool,其大小通过MEMOPTIMIZE_POOL_SIZE设置,其中存储着启用了fast lookup表的散列索引。

         可以通过CREATE TABLE或ALTER TABLE…MEMOPTIMIZE FOR READ语句来启用表的fast lookup。

         fast lookup是通过memoptimize pool中的散列索引结构来实现的,它可以快速访问表的块,从而永久的固定在缓冲区缓存中,以避免磁盘I/O。当配置并由Oracle数据库自动维护memoptimization Rowstore时,将创建这个散列索引。当启用表进行快速查找时,表的块被固定在缓冲区缓存中,表上的查询使用memoptimization pool中的散列索引来提高性能。

 

启用fast lookup要求:

http://www.cndba.cn/Expect-le/article/2926

  •     表不能被压缩
  •     表必须有主键约束

2.      启用memoptimize pool

         要使用fast lookup必须先配置memoptimize pool,COMPATIBLE初始化参数要设置为18.0.0及以上。

SQL> SHOW PARAMETER MEMOPTIMIZE_POOL_SIZE

 http://www.cndba.cn/Expect-le/article/2926

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

memoptimize_pool_size                big integer 0

 

SQL> ALTER SYSTEM SET MEMOPTIMIZE_POOL_SIZE=100M SCOPE=SPFILE;

 

System altered.http://www.cndba.cn/Expect-le/article/2926

 

SQL> SHUTDOWN IMMEDIATE

Database closed.

Database dismounted.

ORACLE instance shut down.

 

SQL> startup

ORACLE instance started.

 http://www.cndba.cn/Expect-le/article/2926

Total System Global Area 1.1832E+10 bytes

Fixed Size                  9010864 bytes

Variable Size            1.1799E+10 bytes

Database Buffers           16777216 bytes

Redo Buffers                7766016 bytes

Database mounted.

Database opened.

 

SQL> SHOW PARAMETER MEMOPTIMIZE_POOL_SIZE

 

NAME                    TYPE        VALUE

------------------------------------  ------------------- ------------------

memoptimize_pool_size      big integer   100M

3.      使用Fast Lookup

3.1.  启用Fast Lookup

         可以创建表时指定MEMOPTIMIZE FOR READ,或者后面修改表时指定MEMOPTIMIZE FOR READ,都可以实现表启用fast lookup。

如:

l  创建表

SQL> create table cndba(id number(6) primary key,name varchar2(50))

memoptimize for read;

Table created.http://www.cndba.cn/Expect-le/article/2926

l  修改

ALTER TABLE lei.cndba MEMOPTIMIZE FOR READ;

3.1.1.   查看执行计划

可以看到红色部分表示了,是利用了Fast Lookup。

SQL> explain plan for select name from cndba where id=3;http://www.cndba.cn/Expect-le/article/2926

Explained.

 

http://www.cndba.cn/Expect-le/article/2926

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUThttp://www.cndba.cn/Expect-le/article/2926

------------------------------------------------------------------------

Plan hash value: 313818278

------------------------------------------------------------------------

| Id  | Operation                              | Name        | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------|   0 | SELECT STATEMENT                       |             |     1 |    40 |     1   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID READ OPTIM| CNDBA        |     1 |    40 |     1   (0)| 00:00:01 |

|*  2 |   INDEX UNIQUE SCAN READ OPTIM         | SYS_C006370 |     1 |       |     1   (0)| 00:00:01 |

------------------------------------------------------------------------

 

http://www.cndba.cn/Expect-le/article/2926

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------

   2 - access("ID"=3)

 

14 rows selected.

3.2.  将表填充到Memoptimize Pool

execute DBMS_MEMOPTIMIZE.POPULATE('LEI','CNDBA');

3.3.  禁用Fast Lookup

ALTER TABLE lei.cndba NO MEMOPTIMIZE FOR READ;

3.3.1.   再看执行计划

         不再使用fast lookup特性。

SQL> explain plan for select name from cndba where id=3;

Explained.

 

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------

Plan hash value: 313818278http://www.cndba.cn/Expect-le/article/2926

 

------------------------------------------------------------------------

| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |

------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |             |     1 |    40 |     1   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| CNDBA        |     1 |    40 |     1   (0)| 00:00:01 |

|*  2 |   INDEX UNIQUE SCAN         | SYS_C006370 |     1 |       |     1   (0)| 00:00:01 |

------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------

   2 - access("ID"=3)

 

14 rows selected.

版权声明:本文为博主原创文章,未经博主允许不得转载。

Memoptimized Rowstore

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1553857次
  • 积分:1957
  • 等级:核心会员
  • 排名:第4名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ