Oracle Materialized View refresh

简述

Materialized views - 物化视图 - 简称 MV,是已经被存储的或者说被物化-‘materialized‘ 成 schema对象的查询结果。其中查询的 ‘From‘ 子句可以给 table, view 和 materialized view命名。这些用来建立 MV的对象都可以被称为 主表-master tables (a replication term) 或者 具体表-detail tables (a data warehousing term)。

Refresh Process

MV中的数据不必和主表-master table 当前的数据总是一致。为了保持 MV中的数据和主表数据一致,必须来刷新 MV。

对于刷新 MV, Oracle 支持几种刷新类型。

Refresh Types

Oracle 支持快速刷新 - fast, 完全刷新 - complete 和 强制刷新 - force。

完全刷新 - Complete Refresh

DBMS_MVIEW.REFRESH(MV_NAME, ‘C‘);

对 MV执行 complete refresh, server 将会执行 MV的定义语句,本质上就是重新创建一遍这个MV。用新的结果集替换已经存在的旧的结果集。Oracle 可以对任意一个 MV 执行 complete refresh。Complete refresh 执行的时间依赖于其定义语句的查询效率,基本上来说,complete refresh 相比于快速刷新-fast refresh 时间长。

如果对于主 MV执行了 complete refresh,那么依赖于这个 MV创建的其他 MV也必须使用 complete refresh。如果对这些 MV使用 fast refresh,Oracle 会返回 error:

  ORA-12034 mview log is younger than last refresh

快速刷新 - Fast Refresh

DBMS_MVIEW.REFRESH(MV_NAME, ‘F‘);

执行 fast refresh, Oracle会首先识别当前主表和最后一次刷新 MV时候数据的变化,根据变化的数据更新 MV。当变化比较小的时候,Fast Refresh 比 Complete Refresh更加高效,因为数据量比较少。

因为 fast refresh 时需要和最近一次更新后的数据进行比较,所以需要 MV所依赖的主表必须有日志log 文件。并且,为了 fast refresh 比 complete refresh 更快速,在创建 MV时每个join 的 column 必须有索引。

另外,如果 MV是基于 partitioned master tables,则可能需要使用 PCT Refresh - Partition Change Tracking。

DBMS_MVIEW.REFRESH(MV_NAME, ‘P‘);

强制刷新 - Force Refresh

DBMS_MVIEW.REFRESH(MV_NAME, ‘?‘);

执行 force refresh 时, Oracle会先试图执行 fast refresh。如果发现 fast refresh 不可行,则执行 complete refresh。

刷新方法

Refresh Option Parameter Description
COMPLETE C Refreshes by recalculating the defining query of the materialized view.
FAST F
Refreshes by incrementally applying changes to the materialized view.

For local materialized views, it chooses the refresh method which is estimated by optimizer to be most efficient. The refresh methods considered are log-based FAST and FAST_PCT.

FAST_PCT P Refreshes by recomputing the rows in the materialized view affected by changed partitions in the detail tables.
FORCE ?
Attempts a fast refresh. If that is not possible, it does a complete refresh.

For local materialized views, it chooses the refresh method which is estimated by optimizer to be most efficient. The refresh methods considered are log based FASTFAST_PCT, and COMPLETE.

小结

对于 FAST_PCT 刷新方式没有使用过,不了解,只是在 Oracle文档中看到的。MV还可以选择是 ON COMMIT刷新和ON DEMAND,即主表 commit之后 MV开始刷新和在需要刷新的时候进行刷新的两种方式。

参考资料

Oracle Materialized View refresh

时间: 2024-10-12 00:50:39

Oracle Materialized View refresh的相关文章

TimesTen与Materialized View(物化视图)

今天和用户交流,用户突然问到,TimesTen可否缓存多个Oracle的表,也即将多个表Join的结果缓存? 我们先做几个实验,然后再看有什么解决方法. TimesTen数据库对于物化视图的支持 先建立基础表和 Materialized View. CREATE TABLE customer(custId int not null, custName varchar(100) not null, Addr varchar(100), Zip int, Region varchar(10), PR

Oracle数据库零散知识07 -- Materialized view(转)

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性:而ON COMMIT是说,一旦基表有了CO

[Oracle][Performance]善用Materialized View提高查询性能#3 Query Rewrite

早期无query rewrite技术,DBACreate中继table提高前端查询性能,但前端程序也需要修改相关Sql statement(牵一发动全身) 可说相当麻烦,如果需求量少倒还好,但量大的话我想DBA这工作应该没人会想做的(事多钱少责任大~> 这篇就来看看Oracle query rewriete技术所带来的改善(MSSQL2005/2008也有应用) 文章均为自己见解,如有错误还请指教 Overview 当现有的Materialized views被用来满足请求时,查询优化器可以自动

通过案例学调优之--跨库建立物化视图(Materialized View)

应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 一.物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明

MATERIALIZED VIEW

Oracle的物化视图增量刷新机制定时将数据库A上的某个表的数据同步到另一个数据库B上 首先在数据库A上确认该表有主键,然后建立在这个表上建立物化视图日志如 "CREATE MATERIALIZED VIEW LOG ON T_tablename;" 再到数据库B上创建数据库链接和快速刷新的物化视图如" create materialized view mv_tablename refresh fast on demand start with sysdate next sy

Postgresql - MATERIALIZED VIEW

MATERIALIZED VIEWPG 9.3 版本之后开始支持物化视图.View 视图:虚拟,不存在实际的数据,在查询视图的时候其实是对视图内的表进行查询操作. 物化视图:实际存在,将数据存成一张表,查询的时候对这个表进行操作.物化视图内的数据需要和表的数据进行同步,这就是refresh. 实验环境:CentOS 7PG 10.4 操作实验: 初始化环境:创建表,并插入数据mytest=# create table t1 (id int ,col1 varchar(10),col2 varch

Materialized View模式

Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在存储数据时,开发人员和数据管理员考虑的第一优先级通常集中在如何存储数据,而不是如何读取数据.所选择的存储格式通常与数据的格式.管理数据大小和数据完整性的要求,以及存储的类型密切相关.例如,使用NoSQL存储文档时,数据通常被表示为多个元素的聚合结构,其中包含了所有的实体的信息. 然而,这可能会对查询

权限不足When Creating a Materialized View Log

The privileges required to create a materialized view log are directly related to the privileges necessary to create the underlying objects associated witha materialized view log. If you own the master table, you can create an associated materialized

Oracle 视图view

在我看来,oracle的视图就是用于将多个表的关联查询结果映射成[临时表],视图与系统表中的数据是实时对应的. 我们可以像操作表的查询一样来操作视图查询. 视图写法: CREATE OR REPLACE FORCE VIEW V_TEM ( ID, NAME ) AS SELECT ID,NAME FROM TABLE 项目中的一个案例,将一个自关联的结构表(行转多列)体现组织结构:市-区县-网格-乡镇-渠道 用到的知识点: 1.SYS_CONNECT_BY_PATH(字段,间隔符)    示例