新闻资讯
行业动态
您现在的位置:首页>新闻资讯>行业动态

Oracle 19C性能优化新特性Memoptimize Rowstore 之Fast Lookup

发布时间:2019-3-29 浏览次数:2903

Oracle 12C 中引入了In Memory Column Store的新特性,该功能将热表以列的形式存放在独立内存中,以提升聚合类查询的性能。在18C版本中,Oracle推出了Memoptimize Rowstore新功能,该功能极大提升基于主键值表查询的性能,SQL查询可以直接通过主键键值访问到Memoptimize Pool内存中的数据块,减少了buffer cache访问、磁盘IO及相关CPU的消耗,从而提升查询的性能。19C中,Oracle增强了Memoptimize Rowstore的功能,加入Fast Ingest,通过内存来提升主键表的记录插入速度。我们从字面上可以理解,Rowstore指在内存中存放的数据是以行式存储的。与In Memory Column Store记录以列式存储的性能区别在于,行式存储方式更利于对表内整行数据进行的检索。与In Memory类似,Memoptimize Rowstore 配置步骤非常简单,同样无需对应用SQL进行修改。我们只需分配Memoptimize Pool内存空间并指定需要存放在Rowstore内的表就可使用该功能了。

在介绍该功能的使用前,我们先了解一下Memoptimize Rowstore的内部机制。Memoptimize Rowstore使用SGA(图一)中的一块独立内存区域(Memoptimize Pool)来存放相关表的哈希索引(Hash Index)和表的数据块(图二)。Memoptimize Pool中75%的空间分配给Buffer,25%空间分配给哈希索引。Oracle自动为Memoptimize Pool中的表对象创建哈希索引并进行维护,无需人工干预。对于需要进行快速查询的表对象,我们只需要通过CREATE TABLE 或ALTER TABLE语句来指定表的MEMOPTIMIZE FOR READ属性,就能控制表是否通过Memoptimize Rowstore进行优化。需要注意的是,需要存放在Memoptimize Pool内的表只能是heap-organized表,表必须有主键且不能是压缩表。

 

下面我们简要介绍一下Memoptimize Rowstore快速查询的使用步骤。

1.

启用Memoptimize Rowstore。

数据库版本必须18C或以上。指定实例启动参数MEMOPTIMIZE_POOL_SIZE的大小,该参数不能动态调整,需要重启实例。需要注意Memoptimize Pool是个固定的内存空间,意味着其不受自动内存管理功能(Automatic Memory Management)控制。数据库SGA_TARGET自动管理不会根据数据库压力自动调整Memoptimize Pool的大小。


2.

重启实例,检查Memoptimize Pool是否生效

SQL> SHOW PARAMETER MEMOPTIMIZE_POOL_SIZE
 
NAME                   TYPE         VALUE
---------------------  -----------  -----
memoptimize_pool_size  big integer  10G

3.

使用CREATE TABLE 或ALTER TABLE语句来指定表的MEMOPTIMIZE FOR READ属性

CREATE TABLE flookup (

     id       NUMBER(5) PRIMARY KEY, --表必须有PK

     test_col  VARCHAR2(15))

MEMOPTIMIZE FOR READ; 

ALTER TABLE sh.sales MEMOPTIMIZE FOR READ;

4.

使用DBMS_MEMOPTIMIZE.POPULATE将表数据加载至Memoptimize Pool内,数据加载完成后,基于Memoptimize Rowstore的快速查询功能立即生效。

execute DBMS_MEMOPTIMIZE.POPULATE('SH','SALES');

5.

关闭表的快速查询功能。使用ALTER TABLE 指定表NO MEMOPTIMIZE FOR READ 属性。

6.

查询表记录。基于Memoptimize Rowstore 的快速查询适用于带主键值的查询语句。

如以下查询:

SELECT * FROM customer WHERE cust_id = 10;  

新特性Memoptimize Rowstore快速查询是针对有主键表的行式数据查询的一个优化功能,其配置简单且无需修改应用。该功能特别适用于IoT等有大量数据且频繁基于主键查询的表对象性能优化。

地址:陕西省西安市高新区科技四路南侧心桥佳苑第1幢2单元23层22304室
联系人:任经理 136-5921-0883
陕西智易信息技术服务有限公司 版权所有