配置使用IM表达式的基本任务

2017-10-29 Jack 山东Oracle用户组 山东Oracle用户组
山东Oracle用户组 

sdougwx

SDOUG官方订阅号,分享技术、分享快乐、SDOUG在路上


上接IM 5.6。本章为IM系列第五章 使用In-Memory表达式优化查询第七部分配置使用IM表达式的基本任务。

INMEMORY_EXPRESSIONS_USAGE的默认设置使数据库能够同时使用动态和静态IM表达式。您必须使用DBMS_INMEMORY_ADMIN填充IM列存储中的表达式。

通常,您按以下顺序执行IM表达式任务:

·  (可选)更改数据库可以使用的IM表达式的类型。

请参阅配置使用IM表达式

· 捕获并填充IM表达式。

请参阅捕获和填充IM表达式

· (可选)删除一些或所有IM表达式。

请参阅删除IM表达式


配置使用IM表达式

(可选)选择哪些类型的IM表达式符合条件,或禁用所有IM表达式的填充。

先决条件

要使数据库能够使用IM表达式,必须满足以下条件:

·      INMEMORY_SIZE初始化参数设置为非零值。

·      初始化参数COMPATIBLE 的值设置为12.2.0或更高。

:

Oracle Real ApplicationsClusterRAC)数据库中,INMEMORY_EXPRESSIONS_USAGE初始化参数在每个数据库实例上不需要都相同的值。每个IMCU独立列出虚拟列。每个IMCU可以基于初始化参数值和填充或重新填充IMCU时存在的虚拟列来实现不同的表达式。

要配置使用IM表达式:

1.            以具有适当权限的用户身份登录数据库。

2.            要配置使用IM表达式,请使用ALTERSYSTEM语句将INMEMORY_EXPRESSIONS_USAGE设置为以下值之一:

·      ENABLE (默认)—启用动态和静态IM表达式

·      STATIC_ONLY —仅启用静态IM表达式

·      DYNAMIC_ONLY —仅启用动态IM表达式

·      DISABLE —禁用所有IM表达式

示例5-1禁用IM表达式

以下语句禁用IM列存储中IM表达式的存储:

ALTER SYSTEM SET INMEMORY_EXPRESSIONS_USAGE='DISABLE';


和填充IM表达式

IME_CAPTURE_EXPRESSIONS过程在指定的时间范围内捕获并填充数据库中最常访问的20个(最热)表达式。过程强制在最近调用DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS中捕获的表达式。

无论何时调用IME_CAPTURE_EXPRESSIONS过程,数据库都会查询表达式评估的统计信息存储库(Expression StatisticsStore 简称:ESS),并仅在IM列存储中至少部分填充的表上考虑表达式。数据库将20个最热表达式添加到其各自的表中作为隐藏的虚拟列,前缀为字符串SYS_IME,并应用默认的INMEMORY列压缩子句。如果在上一次调用期间添加的任何SYS_IME列不再在最新的前20个列表中,则数据库将它们标记为 NOINMEMORY

如果不调用IME_POPULATE_EXPRESSIONS,则在重新填充其父IMCU时,数据库会逐渐重新填充SYS_IME列。如果表未重新填充,则数据库不会重新填充由IME_CAPTURE_EXPRESSIONS过程捕获的新SYS_IME列。IME_POPULATE_EXPRESSIONS通过强制重新填充来解决此问题。

在内部,IME_POPULATE_EXPRESSIONS过程调用具有INMEMORY属性的SYS_IME列的所有表的DBMS_INMEMORY.REPOPULATE。要在指定的表子集中填充SYS_IME列,请使用DBMS_INMEMORY.REPOPULATE而不是DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS

先决条件

要使数据库能够捕获IM表达式,必须满足以下条件:

·      INMEMORY_EXPRESSIONS_USAGE初始化参数必须设置为除DISABLE之外的值。

·      INMEMORY_SIZE初始化参数设置为非零值。

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

捕获和填充IM表达式:

1.            以具有适当权限的用户身份登录数据库。

2.            使用以下任何参数执行DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS 

·      CUMULATIVE — 创建数据库后,数据库会考虑所有表达式统计信息。

·      CURRENT — 数据库仅考虑过去24小时的表达式统计信息。

3.            (可选)执行DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS强制立即显示最新的IM表达式。

示例5-2捕获过去24小时内的前20IM表达式

此示例仅使用最后一天收集的统计信息捕获IM表达式,然后强制立即填充:

EXEC DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS('CURRENT');
EXEC DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS();

DBA_IM_EXPRESSIONS的以下查询显示当前填充了两个IM表达式(提供了示例输出):

COL OWNER FORMAT a6 
COL TABLE_NAME FORMAT a9 
COL COLUMN_NAME FORMAT a25
SET LONG 50
SET LINESIZE 150
 
SELECT OWNER, TABLE_NAME, COLUMN_NAME, SQL_EXPRESSION 
FROM   DBA_IM_EXPRESSIONS;
 
OWNER  TABLE_NAM COLUMN_NAME               SQL_EXPRESSION
------ --------- ------------------------- ---------------------------------------------
HR     EMPLOYEES SYS_IME00010000001746FD   12*("SALARY"*NVL("COMMISSION_PCT",0)+"SALARY")
HR     EMPLOYEES SYS_IME00010000001746FE   ROUND("SALARY"*12/52,2)


IM表达式

DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS过程删除数据库中的所有SYS_IME表达式虚拟列。DBMS_INMEMORY.IME_DROP_EXPRESSIONS过程从表中删除一组指定的SYS_IME虚拟列。

删除SYS_IME 列的典型原因是空间和性能。表的SYS_IME列的最大数量,不管属性是INMEMORY还是NOINMEMORY,,都是50.在达到表的50个表达式限制之后,数据库将不会添加新的SYS_IME列。要为新表达式创建空间,必须使用DBMS_INMEMORY.IME_DROP_EXPRESSIONSDBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS过程手动删除SYS_IME 列。

IME_DROP_ALL_EXPRESSIONS过程从所有表中删除所有SYS_IME列,而不管它们是否具有INMEMORY属性。实际上,该过程充当数据库范围的重置按钮。

对于具有SYS_IME列的段,使用IME_DROP_ALL_EXPRESSIONS触发所有IMEUIMCU的下降。例如,如果50个填充表每个都有一个SYS_IME列,则IME_DROP_ALL_EXPRESSIONS将从IM列存储中删除所有50个表。要再次填充这些段,您必须使用DBMS_INMEMORY.POPULATE过程或执行全表扫描。

先决条件

要删除IM表达式,以下条件必须为true

·      INMEMORY_EXPRESSIONS_USAGE初始化参数设置为除DISABLE之外的值。

·      INMEMORY_SIZE初始化参数设置为非零值。

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

删除IM表达式:

1.            以具有适当权限的用户身份登录数据库。

2.            执行 DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS DBMS_INMEMORY.IME_DROP_EXPRESSIONS

如果执行IME_DROP_EXPRESSIONS,则指定以下参数:

·      schema_name —包含In-Memory表的schema的名称

·      table_name —In-Memory表名称

·      column_name —SYS_IME列的名称。默认情况下,该值为null,它指定此表中的所有SYS_IME列。

示例5-3删除表中的所有IM表达式

此示例删除hr.employees表中的所有IM表达式:

EXEC DBMS_INMEMORY.IME_DROP_EXPRESSIONS('hr', 'employees');


未完待续。


以下是IM系列文章内容:

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列存储启用ADO(IM 4.8)

第五章 使用In-Memory表达式优化查询(IM 5.1)

IM表达式的目的(IM 5.2)

IM表达式如何工作(IM 5.3)

数据库如何填充IM表达式(IM 5.4)

IMEU如何与IMCU相关联(IM 5.5)

用户接口和IM表达式(IM 5.6)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值