暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

全面介绍Oracle 12c的HeatMap/ILM/ADO功能

Oracle蓝莲花 2021-04-15
2643


1.基于Oracle 12c HeatMap.ILM.ADO三项技术的工作原理,及其功能介绍,还是一样,稍后通过案例分析加深理解和使用:
 1.1Heap Map介绍:
  1.1.1Heat Map是Oracle 12c提供的一种自动跟踪、分析和记录数据访问和数据变更情况的技术,包括在Segment级别对数据访问和在数据块和Segment级别对数据访问变更情况的跟踪、分析,并将这些分析统计数据存储在位于SYSAUX表空间的相关系统数据字典表中
  1.1.2Heat Map提供分段级的数据访问跟踪和分段级和行级的数据修改跟踪。我们可以使用HEAT_MAP初始化参数启用这个功能
   1.1.2.1我们可以使用ALTER system或ALTER session语句使用HEAT_MAP子句在系统或会话级别启用和禁用热映射跟踪。例如,下面的SQL语句支持对数据库
          实例进行热图跟踪:

ALTER SYSTEM SET HEAT_MAP = ON;      
   1.1.2.2启用热图时,所有访问都由内存中的活动跟踪模块跟踪。系统中的对象和SYSAUX表空间没有被跟踪
   1.1.2.3禁用热图跟踪通过如下语句:
ALTER SYSTEM SET HEAT_MAP = OFF;
   1.1.2.4当热图被禁用时,内存中的活动跟踪模块不会跟踪访问。HEAT_MAP初始化参数的默认值为OFF。

注意:HEAT_MAP初始化参数还支持并禁用自动数据优化(ADO)。对于ADO,热图必须在系统级别启用,这是关联关系,别着急,一会来介绍ADO是什么鬼

     1.1.3如何利用数据字典查询热图数据?
   1.1.3.1V$HEAT_MAP_SEGMENT视图显示实时的段访问信息。对应的还有ALL_、DBA_和USER_HEAT_MAP_SEGMENT视图显示用户可见的所有段的最新段访问时间。
注意:

        ALL_、DBA_和USER_HEAT_MAP_SEG_HISTOGRAM视图显示用户可见的所有段的段访问信息。

   1.1.3.2DBA_HEATMAP_TOP_OBJECTS视图显示最活跃的对象的热图信息。
   1.1.3.3DBA_HEATMAP_TOP_TABLESPACES视图为最活跃的表空间显示热图信息
   1.1.3.4来关注如下查询信息内容:
 ......
......






注意:1.详细的数据字典介绍关注Oracle官网即可,这里就不做介绍了,对于以上视图,做个简单的分析介绍:
  1.1TRACK_TIME为该segment被访问时的系统时间。
  1.2SEGMENT_WRITE为该segment是否有写操作。
  1.3FULL_SCAN为该segment是否有全表扫描操作。
  1.4LOOKUP_SCAN为该segment是否有按索引访问操作。
  1.5DBA_HEAT_MAP_SEGMENT视图包括了Segment最新访问情况等信息
  
注意:1.如果启动了Heat Map功能,Oracle将自动对除SYSTEM和SYSAUX之外所有数据对象的DML和访问操作进行跟踪、分析和保存
   2.12c后台NMON进程定期将保存在SYS.HEAT_MAP_STAT$ 、V$HEAT_MAP_SEGMENT等表和视图的Heat Map统计信息刷新到上述视图中
----------------小章节分割线----------------
2.如何利用DBMS_HEAT_MAP API来管理热图数据?
 2.1DBMS_HEAT_MAP包提供了一个接口,用于在不同级别的存储(包括块、区段、段、对象和表空间)中将热图外部化。所谓外部化就是我们通过表函数去跟踪segment变化情况:
 2.2要实现ILM策略,可以使用Oracle数据库中的Heat Map跟踪数据访问和修改。还可以使用自动数据优化(ADO)来自动化数据库中不同存储层之间的数据压缩和移动。

注意:LIM和ADO分别表示为:Information Lifecycle Management (ILM)  Automatic Data Optimization (ADO) ,到这我们就理解了,哦哦,无非就是通过各种方法进行策略定制,只不过DBMS_HEAT_MAP是实现策略的方式而已。那么我们来聊聊具体这个测试如何定制,有什么注意事项.
 2.3热图在块级跟踪修改时间,在段级跟踪多个访问统计信息。系统中的对象和SYSAUX表空间没有被跟踪。DBMS_HEAT_MAP允许我们去访问各个级别的热地图统计数据包括我们关心的:block、extent、segment、objects和tablespace,非常的方便
  2.3.1我们展开各个应用需求:第一个表函数返回表段中每个块的最后修改时间。它不返回非数据的段类型的信息

 2.4此表函数返回表段的extents级别热图统计信息。它不返回非数据的段类型的信息。在区段层面上,包括最小修改时间和最大修改时间:
 

注意:各个字段说明不做介绍了,和blocks级别跟踪是一样的

 2.5此表函数返回属于对象的所有段的最小、最大和平均访问时间。对象必须是一个表。如果对表以外的对象表调用表函数,则会引发错误

注意:涉及到表空间级别,segment级别这里就不做介绍了,感兴趣可以到oracle官网进行学习。

 2.6如何使用DBMS_HEAT_MAP子程序管理热图数据?


/
----------------小章节分割线----------------
3.OK,到这里,热图的启动,关闭,工作原理,包括如何跟踪热图,用什么方法跟踪我们都了解了,那么启动Heat Map技术之后,ADO流程的第二步就是根据不同条件,定义压缩和数据迁移策略。本节我们主要通过例子来介绍各级别压缩策略的定义和相关概念。

 3.1什么叫分段级和行级压缩分层?这个概念和工作原理必须明确,代码很简单,就是一句话,但如果不懂具体含义,我们会错误的利用这种技术
  3.1.1自动数据优化(ADO)如何实现数据库压缩分层和存储分层,以及关于高级压缩选项的使用方法.
  3.1.2ADO允许我们组织创建自动化数据压缩和数据的策略,移动和实现压缩和存储的分层。ADO的策略本质是在表和表分区的段或行级别指定。
   Oracle会定期评估ADO策略,并使用这些信息由热图收集,以确定执行哪些策略。包括评估策略.
 3.2表级别压缩机制:

注意:1.该语句表示10天后,如果tbs_oracle表空间数据处于低访问(LOW ACCESS)状态,则tbs_oracle表空间将自动按ROW STORE COMPRESS ADVANCED算法进行压缩
   2.LOW ACCESS状态,是指Oracle自动根据ROWID访问量(按索引访问)、全表扫描量、DML操作量等统计值进行加权计算,而得到的一个综合指标。该指标与不同压缩算法相关,例如若采用ARCHIVE HIGH压缩算法,则ROWID访问量(按索引访问)和DML操作量的权重较高,而全表扫描量权重较低。
   3.ROW STORE COMPRESS ADVANCED等同于11g的OLTP压缩算法,也就是我们常说的Advanced Compression Option的功能

 3.3分组级别压缩机制:

注意:1.该语句表示30天后,如果t_600_demo表数据没有修改(NO MODIFICATION)时,则t_600_demo表数据将自动按ROW STORE COMPRESS ADVANCED算法进行压缩
   2.该语句指定了GROUP关键字,表示该表的SecureFiles LOB字段也将进行相应的压缩。与表的ROW STORE COMPRESS ADVANCED压缩算法相对应的SecureFiles LOB压缩级别是LOW,而COLUMN STORE COMPRESS FOR QUERY LOW/QUERY HIGH和COLUMN STORE COMPRESS FOR ARCHIVE LOW/ARCHIVE HIGH压缩算法相对应的SecureFiles LOB压缩级别是MEDIUM
   3.GROUP短语还表示该表进行压缩时,对应的Globle Index将自动进行维护
  
 3.4另一种分组级别压缩机制

注意:1.该语句表示当6个月后,如果600 demo表数据没有访问(NO ACCESS)时,则600 demo表的part1分区数据将自动按COLUMN STORE COMPRESS FOR ARCHIVE HIGH算法进行压缩。

 3.5段级别压缩机制

注意:该语句表示当90天后,如果600 demo表数据处于无修改(NO MODIFICATION)状态,则600 demo表数据将自动按COLUMN STORE COMPRESS FOR QUERY HIGH算法进行压缩

 3.6另一种段级别压缩机制

注意:该语句表示当6个月后,如果t_600_demo表数据处于低访问(NO MODIFICATION)状态,则600 demo表数据将自动按COLUMN STORE COMPRESS FOR ARCHIVE HIGH算法进行压缩

 3.7再一种段级别压缩机制

注意:该语句表示当6个月后,如果t_600_demo表数据处于无访问(NO MODIFICATION)状态,则t_600_demo表数据将自动按ROW STORE COMPRESS ADVANCED算法进行压缩

 3.8再一种表级别压缩机制

注意:该语句表示当30天后,如果600 demo表数据处于无修改(NO MODIFICATION)状态,则600 demo表数据将自动按ROW STORE COMPRESS ADVANCED算法进行行级(Row-level)压缩。

----------------小章节分割线----------------

4.我们介绍完了基于ADO自动数据优化分层策略,如何利用策略去管理分区表和实现压缩机制,那么我们还需要了解LIM,也就是第二个章节我们提到的Information Lifecycle Management (ILM),这里推荐使用DBMS_LIB_ADMIN功能,DBMS_ILM_ADMIN包提供了一个接口来定制自动数据优化(ADO)策略执行。与分区和压缩相结合,ADO策略可用于帮助实现信息生命周期管理(ILM)策略

 4.1要实现ILM策略,可以使用Oracle数据库中的Heat Map跟踪数据访问和修改。还可以使用自动数据优化(ADO)来自动化数据库中不同存储层之间的数据压缩和移动。
    下面我们利用这个DBMS_LIB_ADMIN的API来实现一个综合案例,帮助大家更好的理解:










                                                                                                                                              




注意:1.示例在ILM_DEMO表的分区JAN_1_2007上创建并执行ADO存储分层策略。
   2.具体关键sql为ALTER TABLE ILM_DEMO MODIFY PARTITION  JAN_1_2007 ILM ADD POLICY TIER TO ILMTSDEMO_LOWCOST;
   3.示例显示,分区JAN_1_2007最初存储在ILM_SOURCE表空间中
   4.在将数据加载到分区JAN_1_2007之后,ILM_SOURCE表空间获得了75%的满空间和25%的空闲空间。
   5.我们在分区JAN_1_2007中添加了一个存储分层策略,以便将其移动到ILMTSDEMO_LOWCOST表空间。
   6.当包含对象的表空间满足表空间填充阈值时,策略计算为true。
   7.实例表明,这并不是最初发生的,dba_ilmevaluationdetails显示了在策略评估之后不满足的先决条件。
   8.为了使策略计算为true,我们调整了ILM参数TBS_PERCENT_FREE和TBS_PERCENT_USED, 然后对策略进行评估为真,触发相应的ILM作业进行移动ILMTSDEMO_LOWCOST表空间的JAN_1_2007分区。
   9.在ILM作业完成后,相应的存储分层策略被自动禁用。
   10.通过示例,我们强制对策略进行评估,而不是等待维护打开并触发策略评估和相应作业的窗口(默认情况下,维护窗口中评估ILM策略)。
----------------小章节分割线----------------

5.ILM ADO的示例存储分层策略使用自定义PL SQL功能表分区实现方法:

 5.1我们想要使用自定义PL/SQL策略函数应用ILM ADO存储分层策略,该策略在不修改X天之后将表分区移动到低成本的表空间。
 5.2该示例在ILM_DEMO表的分区JAN_1_2007上创建并强制执行ADO存储分层策略,以便在不修改X天之后将分区移动到低成本的表空间。
  这是由定制plsql函数NOT_MODIFIED_CUSTOM实现的,如下面的命令所示:





 



                                                                                                                  


注意:1.该示例显示,分区JAN_1_2007最初存储在ILM_SOURCE表空间中。
   2.我们在分区JAN_1_2007中添加了一个存储分层策略,以便在NOT_MODIFIED_CUSTOM函数返回true时将其移动到ILMTSDEMO_LOWCOST表空间
   3.我们还强制对策略进行评估,而不是等待维护窗口打开并触发策略评估和相应的作业,然后将分区JAN_1_2007移动到ILMTSDEMO_LOWCOST表空间。
      4.示例表明,这并不是最初发生的,dba_ilmevaluationdetails显示了策略评估后不满足的先决条件
----------------小章节分割线----------------

6.ADO和Heat Map的限制
 6.1oracle 12cR1多租户容器数据库(CDB)不支持ADO和Heat Map。
 6.2分区级别的ADO和压缩支持时间有效性,但是行级别的ADO策略会压缩超过其有效时间的行(访问或修改)。
 6.3如果在ORA_ARCHIVE_STATE列上分区,则支持分区级ADO和压缩用于数据库内归档
 6.4如果策略默认位于表空间级别,则不支持ADO的自定义策略(用户定义函数)
 6.5当使用存储分层时,ADO不执行对目标表空间中的存储空间的检查
 6.6ADO不支持具有对象类型或物化视图的表
 6.7ADO不支持索引组织的表或集群。
 6.8ADO并发性(ADO的并发策略作业的数量)取决于Oracle调度器的并发性。如果ADO的策略作业失败两次以上,那么该作业将被标记为禁用,之后必须手动启用该作业。
 6.9ADO的策略只在Oracle调度器维护窗口中运行。在维护窗口之外,所有策略都被停止。唯一的例外是那些在ADO离线模式下重建索引的作业
 6.10ADO有与move表和表分区相关的限制
 
注意:日常使用中如果遭遇ORA-38342报错,很可能是触发了以上限制条件,可能的报错信息如下内容显示:
解决办法:1.针对12cR1版本,non-CDB databases模式下使用该特性
    2.或者参考如上限制内容其中一条,是否满足报错触发条件
    3.在Oracle数据库12.1中,heat map和自动数据优化(ADO)功能只有在使用非cdb体系结构时才可用。在Oracle数据库12.2中,多租户体系结构现在支持这个功能。
----------------小章节分割线----------------

7.报错信息:
 7.1Heat map函数(DBMS_HEAT_MAP)没有填充日期字段如何定位问题?
 
注意:dbms_heat_map.extent_heat_map block、fno、bytes和所有number类型数据都会被填充,但是日期字段不会被填充,
      例如函数中的字段:min_writetime、max_writetime、avg_writetime

注意:表中的min_writetime、max_writetime和avg_writetime (DBMS_HEAT_MAP.EXTENT_HEAT_MAP())没有立即填充。

解决办法:1.在数据更改后大约半个小时或者一个小时在执行一次查询试试
    2.除非由SYS用户执行,否则此类查询不会返回任何行的,这是由于bug 17036448的问题导致的,可以了解一下
    3.还有可能是触发了第6章节我们介绍的ADO和Heat Map的限制问题
    4.目前为止bug 17036448不是可公共访问的,貌似内容正在更新, 暂时无法使用, 估计很快就可使用
----------------------------------------------

<点亮梦想.拒绝平庸>

600团队(QQ群:851604218)

文章转载自Oracle蓝莲花,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论