第四章 为IM 启用填充对象之为IM列存储启用ADO(IM 4.8)

2022-04-23 09:45:02 浏览数 (1)

In-Memory手册之:前言(IM-前言)

第一章 Oracle Database In-Memory 相关概念(IM-1.1)

第一章 Oracle Database In-Memory 相关概念(续)(IM-1.2)

第二章 Oracle Database In-Memory 体系结构(上) (IM-2.1)

第二章 In-Memory 体系结构 (IM-2.2)

第二章 IM 体系结构:CPU架构:SIMD向量处理(IM-2.3)

第三章 启用和调整IM列存储的大小(IM-3.1)

第四章 为In-Memory 启用填充对象(IM-4.1 第一部分)

第四章 为In-Memory 启用填充对象(IM-4.2 第二部分)

第四章 为IM 启用填充对象之启用和禁用列(IM-4.3 第三部分)

第四章 为IM 启用填充对象之在NO INMEMORY表上指定INMEMORY列属性:示例(IM-4.4 第四部分)

第四章 为IM 启用填充对象之启用和禁用表空间的IM列存储(IM 4.5)

第四章 为物化视图启用和禁用IM列存储(IM 4.6)

第四章 为IM 启用填充对象之强制填充In-Memory对象:教程(IM 4.7)

本篇为IM系列的第四章:为IM 启用填充对象之为IM列存储启用ADO(IM 4.8)

为IM列存储启用ADO

信息生命周期管理(ILM)是一组用于管理从创建到归档或删除的数据的过程和策略。

自动数据优化(ADO)创建策略,并根据这些策略自动执行操作,以实施ILM策略。 ADO使用热图,并跟踪数据访问模式。

注:

本章假设您熟悉ILM、ADO和Heap Map的基本概念。

此部分包含以下主题:

  • 关于ADO策略和IM列存储 在Oracle Database 12c第2版(12.2)中,ADO通过ADO策略管理IM列存储。您只能在段级别创建具有INMEMORY 子句的ADO策略。
  • ADO和IM列存储的目的 从Oracle Database 12c第2版(12.2)开始,ADO将IM列存储管理为新的数据层。
  • ADO如何与列数据一起使用 从ADO角度来看,IM列存储是另一个存储层。
  • ADO和IM列存储的控制 使用 HEAT_MAP初始化参数启用热图(Heat Map)。通过SQL和PL / SQL接口控制ADO。
  • 为IM列存储创建ADO策略 您可以使用ADO策略根据热图(Heat Map)统计信息设置,修改或删除对象的 INMEMORY子句。

关于ADO策略和IM列存储

在Oracle Database 12c第2版(12.2)中,ADO通过ADO策略管理IM列存储。您只能在段级别创建具有INMEMORY 子句的ADO策略。

数据库将ADO策略(如对象的属性)视为对象。ADO策略是在数据库级别,而不是实例级别。 Oracle数据库支持以下类型的DatabaseIn-Memory的ADO策略:

· INMEMORY 策略

此策略使用INMEMORY 属性标记对象,启用它们以用于IM列存储中的填充。

· 重新压缩策略

此策略将更改INMEMORY 对象上的压缩级别。

· NO INMEMORY 策略

此策略从IM列存储中删除一个对象,并删除其INMEMORY 对象。

Oracle数据库支持以下条件适用于策略:

· 自对象修改以来的特定天数

DBA_HEAT_MAP_SEGMENT视图中的SEGMENT_WRITE_TIME列获取此值。

· 自访问对象以来的特定天数

此值是DBA_HEAT_MAP_SEGMENT视图中的列SEGMENT_WRITE_TIMEFULL_SCANLOOKUP_SCAN中的较大值。

· 自对象创建以来的特定天数

DBA_OBJECTS中的CREATED 列获取此值。

· 用户定义的函数返回布尔值

ADO和IM列存储的目的

从OracleDatabase 12c Release 2(12.2)开始,ADO将IM列存储管理为新的数据层。

您可以创建策略以在IM列存储降低性能时从IM列存储中逐出对象,并在它们提高性能时填充对象。ADO使用HeatMap统计来管理IM列存储。

INMEMORY策略的目的

在许多数据库中,段在创建后经历重大修改。为了最大限度地提高性能,当写活动下降时,ADO可以填充IM列存储中的这些段。例如,如果每天向表中添加分区,则可以创建一个策略,在创建后一天填充sales_2016_d100分区:

代码语言:javascript复制
ALTER TABLE sales MODIFY PARTITION sales_2016_d100 
代码语言:javascript复制
  ILM ADD POLICY SET INMEMORY MEMCOMPRESS FOR QUERY 
代码语言:javascript复制
    PRIORITY HIGH
代码语言:javascript复制
  AFTER 1 DAYS OF CREATION

同样,您可能知道表上的写入活动在创建后两个月下降,并且希望在满足此时间条件时填充此对象:

代码语言:javascript复制
ALTER TABLE 2016_ski_sales
代码语言:javascript复制
  ILM ADD POLICY SET INMEMORY MEMCOMPRESS FOR QUERY 
代码语言:javascript复制
    PRIORITY CRITICAL
代码语言:javascript复制
  AFTER 60 DAYS OF CREATION

上述策略导致2016_ski_sales表的所有现有分区和新分区继承该策略。当段符合策略条件时,数据库将使用指定的INMEMORY 子句独立地标记每个分区。如果段已具有INMEMORY 策略,则数据库将忽略新策略。

重新压缩策略的目的

您可能需要根据访问模式在IM列存储中压缩数据。例如,您可能需要在DML活动停止后2天将段从DML压缩更改为查询压缩:

代码语言:javascript复制
ALTER TABLE lineorders 
代码语言:javascript复制
  ILM ADD POLICY MODIFY INMEMORY MEMCOMPRESS FOR QUERY HIGH 
代码语言:javascript复制
  AFTER 2 DAYS OF NO MODIFICATION

如果对象未填充在IM列存储中,则此策略仅更改压缩属性。如果对象填充在IM列存储中,则ADO使用新的压缩级别重新填充该对象。如果段尚未具有INMEMORY 属性,则数据库将忽略策略。

NO INMEMORY策略的目的

要优化IM列存储中的空间,您可能需要使用NO INMEMORY策略驱逐无效段。此策略还有助于防止由不频繁查询导致的非活动分段的数量。例如,如果特定sales分区上的报表在一年中频繁运行,但通常不是每周运行,则您可能希望在一周没有访问后逐出该分区:

代码语言:javascript复制
ALTER TABLE sales MODIFY PARTITION sales_2015_q1
代码语言:javascript复制
  ILM ADD POLICY NO INMEMORY AFTER 7 DAYS OF NO ACCESS;

如果1998年的sales表很少查询,那么你可能想在没有访问的1天后驱逐:

代码语言:javascript复制
ALTER TABLE sales_1998
代码语言:javascript复制
  ILM ADD POLICY NO INMEMORY AFTER 1 DAYS OF NO ACCESS;

被驱逐的段的查询从不被阻止。数据库可以通过传统的缓冲区缓存机制来访问数据。

ADO如何与列数据一起使用

从ADO角度看,IM列存储是另一个存储层。

此部分包含以下主题:

  • Heat Map如何工作 当启用时,Heat Map自动发现数据访问模式。 ADO使用Heat Map数据在数据库级实现用户定义的策略。
  • 怎样进行策略评估工作 IM列存储策略的策略评估使用与其他ADO策略的评估相同的基础架构。数据库在维护窗口期间自动评估和执行策略。
Heat Map如何工作

当启用时,HeatMap自动发现数据访问模式。 ADO使用Heat Map数据在数据库级实现用户定义的策略。

Heat Map自动跟踪行和段级别的使用信息。在行级别,Heat Map跟踪数据修改时间,然后将这些时间聚合到块级别。在分段级别,Heat Map跟踪修改,全表扫描和索引查找的时间。

启用IM列存储时,Heat Map跟踪列数据的访问模式。例如,sales 表可以是“热的”,而locations表可以是“冷的”。对于列式数据,ADO算法以与基于行的数据相同的方式工作。

数据库会定期将HeatMap数据写入数据字典。数据库在数据字典视图中显示Heat Map数据。例如,要获取内存中对象的读取和写入时间,请查询ALL_HEAT_MAP_SEGMENT视图。

怎样进行策略评估工作

IM列存储策略的策略评估使用与其他ADO策略的评估相同的基础架构。数据库在维护窗口期间自动评估和执行策略。

数据库使用HeatMap统计来评估策略,它存储在数据字典中。设置INMEMORY 属性主要是元数据操作,因此对性能的影响最小。

ADO使用Job Scheduler执行填充。 In-MemoryCoordinator Process(IMCO)执行填充。

ADO和IM列存储的控制

使用 HEAT_MAP初始化参数启用Heat Map。通过SQL和PL / SQL接口控制ADO。

DDL语句中的ILM子句

创建内存策略不需要新的SQL语句,但ILM子句有新的选项。下表描述了ADO和IM列存储的SQL选项。

表4-3 ADO和IM列存储的ILM子句

子句

描述

示例

SET INMEMORY

设置对象的INMEMORY 属性

ALTER TABLE sh.sales ILM ADD POLICY SET INMEMORY MEMCOMPRESS FOR QUERY LOW PRIORITY HIGH SEGMENT AFTER 30 DAYS OF CREATION;

MODIFY INMEMORY

修改对象的压缩级别

ALTER TABLE sh.customers ILM ADD POLICY MODIFY INMEMORY MEMCOMPRESS FOR QUERY HIGH PRIORITY CRITICAL SEGMENT AFTER 30 DAYS OF CREATION;

NO INMEMORY

设置对象的NO INMEMORY属性

ALTER TABLE sh.products ILM ADD POLICY NO INMEMORY SEGMENT AFTER 30 DAYS OF CREATION;

初始化参数

下表描述了与ADO和IM列存储相关的初始化参数。

表4-4 ADO和IM列存储的初始化参数

PL/SQLPackages

下表描述了与ADO和IM列存储相关的PL / SQL软件包

表4-5 ADO和IM列存储的PL/ SQL Packages

Package

描述

DBMS_HEATMAP

在Tablespace、Segment、Object、 Extent和Block级别显示详细的Heat Map数据。

DBMS_ILM

使用ADO策略实施ILM策略。

DBMS_ILM_ADMIN

自定义ADO策略执行。

V$ 和数据字典视图

下表描述了与ADO和IM列存储相关的视图。

表4-6 ADO和IM列存储的视图

为IM列存储创建ADO策略

您可以使用ADO策略根据Heat Map统计信息设置、修改或删除对象的INMEMORY 子句。

要创建ADO IM列存储策略,请在ALTER TABLE语句中指定ILM ADD POLICY子句,后跟以下子句之一:

· SET INMEMORY ...SEGMENT

仅当 DML 活动减弱时,您想要标记段与INMEMORY 属性时,此选项很有用。

· MODIFY INMEMORY... MEMCOMPRESS ... SEGMENT

当频繁修改时,存储未压缩的数据或MEMCOMPRESS FOR DML级别是适当的。替代压缩级别更适合查询。如果段上的活动从大多数写入转换到大多数读取,则可以使用MODIFY子句应用不同的压缩方法。

· NO INMEMORY ...SEGMENT

当访问一个段随时间降低(它变成“冷”),并防止该段的随机接入结果的填充此选项是有用的。

先决条件

在使用ADOIM列存储策略之前,必须满足以下先决条件:

· 通过将INMEMORY_SIZE初始化参数设置为非零值并重新启动数据库,为数据库启用IM列存储。

· HEAT_MAP初始化参数必须设置为ON

HeatMap在段级提供数据访问跟踪,在段和行级提供数据修改跟踪。

· COMPATIBLE 初始化参数必须设置为12.2.0或更高。

创建ADO策略:

1. 在SQL * Plus或SQLDeveloper中,使用必要的权限登录数据库。

2. 使用带有ILM ADD POLICY ... INMEMORY子句的ALTER TABLE语句。

示例4-16创建驱逐策略

在此示例中,您创建一个策略,指定如果在三天内未访问oe.order_items表,则从IM列存储中逐出该表。 ADOIM列存储策略必须是段级策略。

代码语言:javascript复制
ALTER TABLE oe.order_items ILM ADD POLICY
代码语言:javascript复制
   NO INMEMORY SEGMENT
代码语言:javascript复制
   AFTER 3 DAYS OF NO ACCESS;

示例4-17使用DBMS_ILM执行ILM策略Example4-17 Executing an ILM Policy Using DBMS_ILM

您还可以手动评估和执行策略。因此,您可以通过编程方式决定何时需要压缩或分层对象。以下示例手动执行sh.sales的ADO任务:

代码语言:javascript复制
DECLARE
代码语言:javascript复制
  v_executonid NUMBER;
代码语言:javascript复制
BEGIN
代码语言:javascript复制
  DBMS_ILM.EXECUTE_ILM ( owner           => 'SH', 
代码语言:javascript复制
                         object_name     => 'SALES',
代码语言:javascript复制
                         execution_mode  => DBMS_ILM.ILM_EXECUTION_OFFLINE,
代码语言:javascript复制
                         task_id         => v_executionid);
代码语言:javascript复制
END;
代码语言:javascript复制
/

山东Oracle用户组(Shandong Oracle User Group),简称:SDOUG,是一个充满朝气、年轻的非营利性组织,旨在为济南及周边地区技术爱好者提供一个交流平台。SDOUG会不定期组织线下技术分享活动,促进本地区及周边IT技术的发展、帮助技术爱好者提高自己。分享技术、分享快乐,SDOUG在路上。

0 人点赞