1 Oracle Database In-Memory 相关概念
接上期:第一章 Oracle Database In-Memory 相关概念(IM-1.1)
提高混合工作负载的性能
虽然OLTP应用程序不能从IM列存储中访问数据,但双内存(dual-memory)格式可以间接提高OLTP性能。
当所有数据存储在行(rows)中时,提高分析查询性能需要创建访问结构。 标准方法是创建分析索引、物化视图和OLAP多维数据集。 例如,表可能需要3个索引来提高OLTP应用程序的性能(1个主键和2个外键索引)和10-20个附加索引,以提高分析查询的性能。 虽然此技术可以提高分析查询性能,但会降低OLTP性能。 在表中插入行需要修改表上的所有索引。 随着索引数量的增加,插入速度降低。
将数据填充到IM列存储中时,可以删除分析访问结构。 此技术减少了存储空间和处理开销,因为只需要更少的索引、物化视图和OLAP多维数据集。 例如,插入数据,将导致修改1-3个索引而不是11-23个索引。
虽然IM列存储可以大幅提高业务应用程序、特殊分析查询和数据仓库工作负载中的分析查询的性能,但使用索引查找执行短事务的纯OLTP数据库更少受益。 IM列存储不会提高以下类型的查询的性能:
IM列存储完全集成到Oracle数据库中,支持所有高可用性功能。
列格式不会更改Oracle数据库磁盘存储格式。 因此,缓冲区缓存修改和重做日志功能以相同的方式。 完全支持RMAN,Oracle Data Guard和Oracle ASM等功能。
在Oracle Real Application Clusters(Oracle RAC)环境中,默认情况下,每个节点都有自己的IM列存储。 根据您的要求,您可以以不同的方式填充对象:
products
维度表,但是在不同节点间分布 sales
实体表的分区。Database In-Memory 很容易实现,并且不需要更改应用程序。
Database In-Memory 采用的关键方面包括:
INMEMORY_SIZE
初始化参数指定保留供IM列存储使用的内存量。 DDL语句中的 INMEMORY
子句指定要填充到IM列存储中的对象或列。 通过配置IM列存储,您可以立即提高现有分析工作负载和即席查询的性能。所有Database In-Memory功能都需要Oracle Database In-Memory选项。 IM列存储不需要特殊硬件。
先决条件包括:
MEMORY_TARGET
中。 请参见“评估IM列存储所必需的大小”。DUPLICATE
和 DUPLICATE ALL
选项需要 Oracle Engineered Systems。 请参见“在Oracle RAC中部署IM列存储”。对于受益于IM列存储的查询,唯一需要的任务是指定IM列存储的大小,并指定用于填充的对象和列。 查询优化和可用性功能需要额外的配置。
配置IM列存储的主要任务
主要任务是:
INMEMORY
属性。 例如,策略可以在未访问10天后从IM列存储中驱逐 sales
表。 内存中ADO功能需要初始化参数设置 HEAT_MAP=ON
, INMEMORY_SIZE
设置为非零值。
请参见“为IM列存储启用ADO”。优化内存中查询的主要任务
In-memory 查询优化不需要IM列存储起作用。 以下优化任务是可选的:
DBMS_INMEMORY_ADMIN
软件包管理IM列存储中IM表达式的自动检测。 例如,调用 IME_CAPTURE_EXPRESSIONS
过程以定义数据库可以标识“热”表达式,然后逐渐填充它们。 INMEMORY_EXPRESSIONS_USAGE
初始化参数控制数据库可填充的IM表达式的类型:静态、动态或两者。
请参见“INMEMORY_EXPRESSIONS_USAGE”。CREATE INMEMORY JOIN GROUP
语句定义连接组(join groups)。 候选是在连接谓词中经常配对的列,例如,连接实表和维度表的列。
请参见“创建连接组(Join Groups)”。VECTOR_TRANSFORM
hint 以启用内存中聚合,或者 NO_VECTOR_TRANSFORM
禁用它。 in-memory 聚合是一种自动启用的功能,无法使用初始化参数或DDL进行控制。
请参见“IM聚合的控制”。INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT
,在两分钟的时间间隔内限制通过涓流(trickle)重新填充更新的IMCU数量。 您可以通过将此初始化参数设置为0来禁用涓流(trickle)重新填充。
请参见“基于阈值和涓流(Trickle)重新填充”。管理可用性的主要任务
主要任务是:
DBMS_INMEMORY_ADMIN.ENABLE_FASTSTART
过程指定内存中的快速启动(IM FastStart)表空间。 IM FastStart在重新启动数据库时优化IM列存储中的数据库对象的数量。 IM FastStart将信息存储在磁盘上,以便更快地填充IM列存储。
请参见“为IM列存储启用IM FastStart”。DISTRIBUTE
或 DUPLICATE
关键字指定 INMEMORY
以控制Oracle RAC中的数据分布。 默认情况下,每个内存对象分布在Oracle RAC实例之间,有效地采用无列共享架构用于IM列存储。
请参见“在Oracle RAC中部署IM列存储”。INMEMORY_SIZE
在主库和备库上启用IM列存储。 (可选)使用DDL中的 INMEMORY DISTRIBUTE FOR SERVICE
子句填充主库和备库的IM列存储中的不同数据集。
请参见“关于 In-Memory Population”。管理IM列存储或其他Database In-Memory功能不需要特殊工具或实用程序。 完全支持诸如SQL * Plus,SQL Developer和Oracle企业管理器(企业管理器)之类的管理工具。
本节介绍具有特定Database In-Memory功能支持的工具:
MEMCOMPRESS
子句实现的压缩率。 顾问程序使用 DBMS_COMPRESSION
接口。impdp
命令的 TRANSFORM=INMEMORY:y
选项导入为IM列存储启用的数据库对象。In-Memory Advisor 程序是一个可下载的PL / SQL程序包,用于分析数据库中的分析处理工作负载。 此顾问程序建议IM列存储的大小以及将受益于内存中填充的对象的列表。
In-Memory Advisor 根据SQL计划基数、活动会话历史(ASH)、并行查询使用和其他统计信息来区分分析处理与其他数据库活动。 In-Memory Advisor 程序根据统计数据和启发式压缩因子估计IM列存储中的对象大小。
In-Memory Advisor 根据以下内容估计分析处理性能改进因素:
In-Memory Advisor 程序的输出是一个包含建议的报告。 该顾问程序还生成一个SQL * Plus脚本,通过 INMEMORY 子句更改推荐的对象。
In-Memory Advisor 程序不包括在存储的PL / SQL包中。 您必须从Oracle Support 中下载。
Enterprise Manager Cloud Control (Cloud Control) 提供了 In-Memory 列存储中心主页。 此页面提供IM列存储的仪表板界面。
使用此页面来监视数据库对象(例如表、索引、分区和表空间)的内存中支持。 您可以查看对象的 In-Memory 功能并监视其内存使用情况统计信息。 除非另有说明,本手册介绍的是Database In-Memory功能的命令行界面。
Oracle Compression Advisor 估计您可以使用 MEMCOMPRESS
子句实现的压缩率。 顾问程序使用DBMS_COMPRESSION
接口。
您可以使用 impdp
命令的 TRANSFORM=INMEMORY:y
选项导入为IM列存储启用的数据库对象。
使用此选项,Oracle 数据泵(Data Pump)会为具有一个的所有对象保留IM列存储子句。 当指定 TRANSFORM=INMEMORY:n
选项时,Data Pump 将从包含一个的所有对象中删除IM列存储子句。
还可以在导入期间使用 TRANSFORM=INMEMORY_CLAUSE:string
选项,覆盖转储文件中数据库对象的IM列存储子句。 例如,您可以使用此选项更改导入的数据库对象的IM列存储压缩。
(本章结束,第二章:IM 列存储体系结构(IM-2))
山东Oracle用户组(Shandong Oracle User Group),简称:SDOUG,是一个充满朝气、年轻的非营利性组织,旨在为济南及周边地区技术爱好者提供一个交流平台。SDOUG会不定期组织线下技术分享活动,促进本地区及周边IT技术的发展、帮助技术爱好者提高自己。分享技术、分享快乐,SDOUG在路上。