Oracle 10g R2特性之数据仓库和集成特性(二)

日期: 2008-06-21 来源:TechTarget中国

   刷新完成后,再次检查表 ACcountS 的段统计信息。结果如下所示:


  SUBOBJECT_NAME                      VALUE
  —————————— ———-
  P1                                   8320
  P10                                  8624
  P2                                  12112
  P3                                  14656
  P4                                   8800
  P5                                   7904
  P6                                   8256
  P7                                   8016
  P8                                   8272
  P9                                   7840
  PMAX                                  256


  这些段统计信息显示了在一个逻辑读取过程中选择的段。由于这些统计信息是累积的,因此您必须查看值(而非绝对值)中的更改。如果仔细查看以上值,您便会发现只有分区 P3 的值发生了变化。因此,在刷新过程中只选择了分区 P3 而非整个表,确认 PCT 能否在表即使没有 MV 日志的情况下工作。


一个强大而有用的特性,从而允许您可以在已分区的 MV 中执行快速刷新而不会增加性能开销。我认为,该特性是 Oracle 数据库 10g 第 2 版中最有用的数据仓库增强功能。


    区更改跟踪:不需要MV日志


  要了解此增强功能,首先必须了解物化视图 (MV) 刷新过程中的分区修整概念。


  假设基于列 ACC_MGR_ID 对表 ACcountS 进行了分区,每个 ACC_MGR_ID 值一个分区。您根据 ACcountS 创建了一个名为 ACC_VIEW 的 MV,该 MV 也根据列 ACC_MGR_ID 进行了分区,每个 ACC_MGR_ID 一个分区,如下图所示:


   Oracle 10g R2特性之数据仓库和集成特性图2
  假设已经更新了表 ACcountS 中的记录,但只在分区 P1 中进行了此更新。要快速刷新此 MV,您只需刷新分区 P1 而非整个表,这里正是与 ACC_MGR_ID 相关的数据所在的分区。Oracle 自动执行此任务,通过一个名为分区更改跟踪 (PCT) 的特性跟踪对分区的更改。但有一个问题需稍加注意:要在快速刷新的过程中启用 PCT,必须创建 MV 日志,当表中的行发生变化会填充这些日志。发出刷新命令后,刷新进程将读取 MV 日志以识别这些更改。


  不用说,该要求增加了操作的总执行时间。此外,附加的插入操作将消耗 CPU 周期和 I/O 带宽。


  幸好,在 Oracle 数据库10g第2版中,PCT不需要MV日志即可工作。让我们看一看它的作用方式。首先,确认表 ACcountS中没有MV日志。


  SQL> select *
  2  from dba_mview_logs
  3  where master = ’ACcountS’;


  no rows selected


  现在,更新该表中的某个记录。


  update accounts set last_name = ’…’
  where acc_mgr_id = 3;


  该记录位于分区 P3 中。


  现在,您就可以刷新此 MV 了。但首先记录表 ACcountS 所有段的段级统计信息。稍后,您将使用这些统计信息了解使用了哪些段。


  select SUBOBJECT_NAME, value from v$segment_statistics
  where owner = ’ARUP’
  and OBJECT_NAME = ’ACcountS’
  and STATISTIC_NAME = ’logical reads’
  order by SUBOBJECT_NAME
  /


  SUBOBJECT_NAME                      VALUE
  —————————— ———-
  P1                                   8320
  P10                                  8624
  P2                                  12112
  P3                                  11856
  P4                                   8800
  P5                                   7904
  P6                                   8256
  P7                                   8016
  P8                                   8272
  P9                                   7840
  PMAX                                  256


  11 rows selected. 


  使用快速刷新刷新物化视图 ACC_VIEW。


  &#101xecute dbms_mview.refresh(’ACC_VIEW’,’F’)


  ’F’ 参数指示快速刷新。但如果表没有 MV 日志,它是否可以起作用?


  刷新完成后,再次检查表 ACcountS 的段统计信息。结果如下所示:


  SUBOBJECT_NAME                      VALUE
  —————————— ———-
  P1                                   8320
  P10                                  8624
  P2                                  12112
  P3                                  14656
  P4                                   8800
  P5                                   7904
  P6                                   8256
  P7                                   8016
  P8                                   8272
  P9                                   7840
  PMAX                                  256


  这些段统计信息显示了在一个逻辑读取过程中选择的段。由于这些统计信息是累积的,因此您必须查看值(而非绝对值)中的更改。如果仔细查看以上值,您便会发现只有分区 P3 的值发生了变化。因此,在刷新过程中只选择了分区 P3 而非整个表,确认 PCT 能否在表即使没有 MV 日志的情况下工作。


  即使在基表没有 MV 日志的情况下也可以快速刷新 MV 的能力是一个强大而有用的特性,从而允许您可以在已分区的 MV 中执行快速刷新而不会增加性能开销。我认为,该特性是 Oracle 数据库 10g 第 2 版中最有用的数据仓库增强功能。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐