分区更改跟踪:不需要MV日志
要了解此增强功能,首先必须了解物化视图(MV)刷新过程中的分区修整概念。
假设基于列ACC_MGR_ID对表ACcountS 进行了分区,每个ACC_MGR_ID值一个分区。您根据ACcountS 创建了一个名为ACC_VIEW的MV,该MV也根据列ACC_MGR_ID进行了分区,每个 ACC_MGR_ID 一个分区,如下图所示:
假设已经更新了表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。
execute dbms_mview.refresh(’ACC_VIEW’,’F’)
’F’ 参数指示快速刷新。但如果表没有 MV 日志,它是否可以起作用?
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
超越RDBMS:数据仓库与数据湖、数据集市
现在企业从各种来源收集的大量数据已经远远超出传统关系学数据库可处理的范畴。这引发数据仓库与数据湖的问题:何时使 […]
-
对SAP HANA数据库涉嫌知识产权盗窃的指控存疑
Enterprise Applications Consultin公司负责人Joshua Greenbaum表 […]
-
数据货币将决定企业成败
在2017年3月McKinsey公司对500多名高管的调查显示,越来越多的企业使用数据和分析来推动增长,但目前 […]
-
在HANA上实施SAP BW要做哪些准备?
在HANA上实施SAP BW可以帮助公司利用到HANA的速度和性能优势。不过,CIO及技术团队首先要注意一些关键问题。