您的位置:首页 > 其它

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

2017-10-31 09:38 399 查看
原创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 ApplicationsCluster(RAC)数据库中,
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小时内的前20个IM表达式

此示例仅使用最后一天收集的统计信息捕获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_EXPRESSIONS
DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS
过程手动删除
SYS_IME
 列。

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

对于具有
SYS_IME
列的段,使用
IME_DROP_ALL_EXPRESSIONS
触发所有IMEU和IMCU的下降。例如,如果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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐