Oracle信息生命周期管理(三):自动数据优化(Automatic Data Optimization ADO)

Oracle在启用热图(Heat Map)后,会开始收集对象的访问和修改统计信息。而利用这些统计数据,自动数据优化(Automatic Data Optimization ADO)可以判断出哪些数据是热点数据,哪些数据是冷数据(长期不使用),然后制定相应的策略,自动完成数据的压缩和不同存储层之前移动。

目录

一、ADO策略简介

二、ADO策略组成

2.1 管理子句

2.2 压缩子句

2.3 移动子句

2.4 时间周期子句

2.5 Inmemory功能相关子句

三、压缩策略

四、移动策略

五、ADO策略禁用和删除


一、ADO策略简介

ADO策略就是根据热图的统计信息,在满足一定的条件下,数据库自动帮你完成数据压缩/移动等工作。

你可以通过 create table 或 alter table 的 ilm policy 子句来管理表(或者分区)上的ADO策略,包括添加、删除、启用、禁用等操作。在创建策略时你可以指定压缩等级、存储层移动,并且可以通过 after 和 on 子来指定这些动作在什么条件下发生。在创建策略时,Oracle会为ADO策略自动生成名称P1,P2 … Pn(通过视图 dba_ilmpolicies 查看).

ADO策略的生效范围可以定义在表空间、段、行三种级别:

  • 组级别(Group Level),通过关键字 group指定,这个级别会影响对象本身及其相关的对象,比如表及其相关的索引,SecureFiles LOBs等对象。
  • 段级别(Segment Level),通过关键字 segment 指定,这个级别只会影响对象本身(段)。
  • 行级别(Row Level),通过关键字 row 指定,但实际是数据块级别。这个级别会在某数据块中所有的行在一段时间无变更后对数据块进行压缩。使用这个级别的压缩,你必须使用row store compress advanced 或 column store compress for query 子句,并且必须通过 after "time_period_clause" of no modification 子句指定生效时间。

段级别的策略只会生效一次,策略执行后会进入"禁用"状态。当然,你也可以手动再次启用。而行级别策略执行后不会禁用,依然会继续生效。

二、ADO策略组成

ILM策略定义看起来比较复杂,实际上主要可以分为几个模块:

  • 管理子句,定义策略的添加、禁用、删除。
  • 压缩子句,指定应用的压缩等级。
  • 移动子句,指定存储层的移动。
  • 时间子句,指定策略生效的条件。

2.1 管理子句

用来添加、禁用、删除ADO策略。下图第一行 ADD POLICY 后面的ilm_policy_clause展开就是后面的压缩子句、移动子句、时间周期子句和 Inmemory 功能相关子句(Inmemory是指Oracle的Inmemory column store功能,是一种以列的方式在SGA中缓存数据的技术,这里不做过多讨论)。

2.2 压缩子句

用于指定数据压缩的生效级别及压缩等级

2.3 移动子句

用于定义对象的存储层移动

2.4 时间周期子句

用来指定策略的条件生效的时间周期,通常和 after 子句配合使用。

2.5 Inmemory功能相关子句

三、压缩策略

压缩策略用来控制当条件满足时,Oracle对数据应用压缩以节约空间。我们在创建压缩策略的时候,要指定生效范围、压缩级别、及生效时间。

压缩级别可以定义为下列几种,压缩的比例从低到高(更高的压缩级别代表更高的压缩比及更高的CPU消耗):

  • nocompress,禁用压缩。
  • row store compress basic,行式基础压缩,等同于单一 compress 子句,Oracle只会尝试对direct-path插入的数据进行压缩。
  • row store compress advanced,行式高级压缩,Oracle会对所有DML操作的数据进行压缩,这种压缩级别较适合OLTP系统使用。
  • column store compress for query low,低级列式查询压缩,数据会转换为列格式并压缩,这种压缩级别较适合OLAP系统使用。
  • column store compress for query high   高级列式查询压缩,数据会转换为列格式并压缩,这种压缩级别较适合OLAP系统使用。
  • column store compress for archive low  低级列式归档压缩,数据会转换为列格式并压缩,这种压缩级别只适合准长期存储的数据。
  • column store compress for archive high  高级列式归档压缩,数据会转换为列格式并压缩,这种压缩级别只适合准长期存储的数据。

如果仅指定一个关键字 compress,则压缩级别是 row store compress basic。

当语句中仅指定 compress for query/archive 时。默认也会开启混合列压缩,相当于column store compress for query/archive。

压缩生效时间点通过 after 子句附加一个时间周期和事件类型,可以选择的事件类型有:

  • of no access,定义表多久无访问后生效。
  • of no modification,定义表多久无修改后策略生效。
  • of creation,定义表建立后多久策略生效。

示例一:在 create table 时,指定表12个月无访问后,在表级别应用高级列式归档压缩。

create table ilm_example(
id number,
name number)
ilm add policy    -- 新增策略
compress for archive high     -- 指定压缩级别,相当于column store compress for archive high
segment    -- 指定生效级别
after 12 months of no access;    -- 指定生效条件

策略创建后可以通过user_ilmpolicies查看:

select * from user_ilmpolicies;

示例二:建表后,使用 alter table 指定在数据块级别(关键字row)在1个月无变更后,应用行式高级压缩.

create table ilm_example2(id number, name varchar(32));

alter table ilm_example2
ilm add policy row store compress advanced row
after 1 month of no modification;

以上只是简单示例,实际应用中,根据需要选择合适的的压缩级别和生效条件。

四、移动策略

移动策略可以自动完成数据在不同的存储层之间移动,主要有有两种触发方式,函数触发和表空间使用比例触发

  • 当指定on function 子句时,函数返回true的时候触发迁移动作。
  • 当忽略on function 子句时,数据的移动由ADO参数 tbs percent used 控制,当表空间的使用达到参数设置的比例后,默认是85%(即表空间使用达到85%及以上认为表空间已满),触发ADO迁移动作。移动后,空间释放的目标比例是 tbs percent free,默认是25,但这只是一个目标参考值,并不一定能达到。

除了以上2种触发方式,当迁移目标是只读表空间时(限定),还可以通过 after 子句指定时间周期子句来触发迁移。

ADO策略的相关控制参数可以通过视图 dba_ilmparameters 查看:

你可以通过dbms_ilm_admin 包附带的存储过程来修改这些参数值,这里我们把表空已满的参数修改为80%(达到即会触发ADO移动策略),表空间释放目标改为30%:

exec dbms_ilm_admin.customize_ilm(dbms_ilm_admin.tbs_percent_used, 80);
exec dbms_ilm_admin.customize_ilm(dbms_ilm_admin.tbs_percent_free, 30);

示例一:表空间使用比例触发ADO移动

我们新建2个表空间high_performance_tbs,low_cost_tbs。分别代表高性能存储和低成本大容量储存(实际应用中,通过指定表空间文件的物理位置来使其落在不同的存储层上)。

create tablespace high_performance_tbs;
create tablespace low_cost_tbs;

在high_performance_tbs新建一个表ilm_example3,添加策略,通过参数tbs percent used 比例触发移动至low_cost_tbs:

create table ilm_example3 (
id number, 
name varchar(32)) 
tablespace high_performance_tbs;    -- 新建时指定在high_performance_tbs

alter table lim_example3 ilm add policy tier to low_cost_tbs;  --ADO生效时移动到low_cost_tbs

示例二:时间周期触发ADO移动

通过after子句,指定在表12个月无修改时,将其自身及相关对象(移动相关对象需要用group级别)移动到只读表空间。

create tablespace read_only_tbs;
alter tablespace read_only_tbs read only;  --创建只读表空间

将刚才的表空间比例移动策略删除(否则会冲突),新增策略

alter table ilm_example3 ilm delete policy p23;

alter table ilm_example3
ilm add policy
tier to read_only_tbs read only    -- 通过read only关键字指定移动到只读表空间
group    -- 指定group级别还会移动相关对象
after 12 months of no modification;

ADO策略禁用和删除

策略在创建后,可以通过alter table 语句对其进行禁用、启用或者删除,操作范围可以是单一策略或者表上的全部策略。

禁用/启用/删除单一策略

alter table ilm_example ilm disable policy p42;
alter table ilm_example ilm enable policy p42;
alter table ilm_example ilm delete policy p42;

禁用/启用/删除表上全部策略

alter table ilm_example ilm disable_all;
alter table ilm_example ilm enable_all;
alter table ilm_example ilm delete_all;

以上提到的所有策略在分区上同样适用,同一个表不同的分区可以设置独立的ADO策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值