博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置使用IM表达式的基本任务
阅读量:4293 次
发布时间:2019-05-27

本文共 3903 字,大约阅读时间需要 13 分钟。

2017-10-29 Jack
山东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系列文章内容:





第二章 










你可能感兴趣的文章
读书笔记_量化交易如何建立自己的算法交易04
查看>>
设计模式01_原因
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
设计模式16_策略模式
查看>>
海龟交易法则01_玩风险的交易者
查看>>
海龟交易法则02_揭秘海龟思维
查看>>
海龟交易法则03_海龟的培训
查看>>
python笔记01_高级特性和函数式编程
查看>>