`

物化视图学习(一)

阅读更多

和物化视图相关的一些概念理论:

 

物化视图:就是对已经存储于别处的数据的转换和复制。

 

基础表:物化视图使用到的表被称为基础表。

 

容器表(container table):容器表是一个“普通”表,它与物化视图拥有相同的名称。它被用来存储这个查询语句返回的结果集。

 

查询重写:当查询优化器收到一条待优化的查询,既可以选择直接使用它,也可以使用物化视图来对它进行重写,只要这个物化视图包含执行这条查询需要的全部或部分数据。

 

如果希望提高应用程序的性能,同时不能修改它执行的SQL语句,则可以使用物化视图的查询重写特性,当然,决定使用或不使用物化视图是基于查询优化器对执行计划开销的计算。提示rewrite和no_rewrite可用来影响查询优化器的这个决定。

 

物化视图相关参数:

1.可以指定容器表的相关物理属性,如分区,压缩,表空间以及存储参数。在这方面,容器表与其他表的处理方式是一样的。

2.在创建物化视图时,查询语句会被执行并且它的结果将被存储到容器表中,这是因为参数build immediate(立即构造)是默认的选项。还有另外两个选项:其一为通过制定参数build deferred(延迟构造)来将插入记录的时间延迟到进行第一次刷新操作的时候,其二为通过指定参数on prebuild table(基于预创建表)来使用一个已经存在的表作为容器表。

3.查询重写功能在默认情况下是不启用的。要启用它,必须指定参数enable query rewrite。

4.在默认情况下,为了提高快速刷新(fast refresh)的性能,将会自动为容器表创建一个索引。如果不想创建这个索引,可以指定参数 using no index来实现。

 

查询重写

只要当SELECT子句存在于SQL语句中,查询优化器就可以考虑利用查询重写功能。另外只有在动态初始化参数query_rewrite_enabled必须设置为TRUE和必须在创建物化视图时指定了参数enable query rewrite时,才可以使用查询重写功能。

查询重写包含3种类别:

1.全文匹配的查询重写

2.部分文本匹配的查询重写

3.一般查询重写

 

参数:query_rewrite_integrity

这个参数的设置决定了在包含没有验证的约束或无效数据时,查询优化器可以使用物化视图查询重写。这个参数可以设置以下3值:

enforced---只有物化视图包含的是最新的数据时才能用来做查询重写。另外,只有经过验证的约束才能被一般查询重写所使用。默认值

trusted---只有物化视图包含的是最新的数据时才能用来做查询重写。另外,维度与约束信息在激活未验证并被置为rely的时候可以被一般查询重写所信任。

stale_tolerated----所有存在的物化视图,包含哪些含有实效数据的物化视图,都可以被用来做查询重写。另外,维度与约束信息在激活未验证并被置为rely的时候可以被一般查询重写所信任。

 

如果某个SQL语句没有使用查询重写,而你不理解为什么会这样,就可以使用包dbms_mview里的存储过程explain_rewrite来找到问题所在。分析时需要用到rewrite_table表,假如rewrite_table分析所在的模式中不存在,调用$ORACLE_HOME/rdbms/admin下的脚本utlxrw.sql

 

可以参考user_mviews视图中的rewrite_capability字段,检查物化视图支持哪些查询重写,rewrite_capability有几个不同的值:none,textmatch或general。如果值为gereral,就代表物化视图支持一般查询重写,如果值为textmatch,就很有必要知道至少以下2点:第一:具体支持这两种基于文本匹配的查询重写里面的哪一种?全文匹配或部分文本匹配的查询重写?第二:为什么不支持一般查询重写? 为了支持回答以上问题,可以使用包DBMS_MVIEW里的存储过程explain_mview,需要用到mv_capabilities_table,假如不存在此表,需要执行$ORACLE_HOME/rdbms/admin/utlxmv.sql创建此表,mv_capabilities_table中的字段msgtxt简要地说明为什么不支持特定的查询重写的原因。

 

4.物化视图的刷新

 当表被修改时,依赖于它的物化视图会失效。因此,需要执行一次刷新来保持物化视图的有效性。在创建物化视图的时候,可以指定如何以及何时进行刷新操作。可以有以下4种选择:

 完全刷新(REFERSH COMPLETE):容器表的所有内容都会被删除,并且所有的数据都会从基础表重新加载。只有在相当一部分数据被修改后才去使用这种方式。

快速刷新(REFERSH FAST):容器表中的内容会被重用,只有被修改的数据才会被同步到容器表。如果基础表上只有少量数据被变更,就应该使用这种方法。只有满足多个条件时,才会考虑这种方法,如果其中一个条件不满足,则或REFERSH FAST被拒绝作为物化视图的一个有效参数,或者会抛出一个错误异常。

强制刷新(REFRESH FORCE):最初,会尝试使用快速刷新。如果它无法工作,就执行一次完全刷新。

永不刷新(NEVER REFRESH):物化视图永不刷新。

 

可以通过以下方式来指定物化视图刷新发生的时间点。

根据需要(ON DEMAND)-物化视图会在显式请求的情况下进行刷新

在提交时(ON COMMIT)-物化视图会在基础表修改所在的同一个事物里进行自动刷新。

当选择手工刷新物化视图的时候,可以使用包DBMS_MVIEW中的refresh、refresh_all_mviews、refresh_dependent存储过程。

5基于物化视图日志的快速刷新

物化视图日志是一个数据库引擎自动维护的表,它被用来跟踪基础表上发生的变更。可以在每个基础表上创建一个物化视图日志。

可以查看user_mview_logs视图检查在基础表上创建的物化视图日志。

可以通过DBMS_MVIEW的EXPLAIN_MVIEW过程检查物化视图不能够实现快速刷新的原因,存储过程的输出结果保存在表mv_capabilities_table中。

6包含分区变化跟踪的快速刷新

基于物化视图日志的快速刷新在进行了类似CREATE PARTITION或DROP PARTITION的分区管理操作后无法被执行。为了解决这个问题,包含分区变化跟踪(PCT,partition change tracking)的快速刷新就出现了。思路是,数据库引擎可以在分区级别跟踪数据的失效与否,而不仅仅在表一级进行跟踪。也就是说,它可以跳过所有没有发生变更的分区来执行刷新操作。如果物化视图包含下列信息,就可以做到这一点。

 分区键值

 rowid

 分区标记

 依赖于连接的表达式(仅仅从Oracle 10g开始)

 

7何时使用物化视图

   在逻辑读数量与返回记录数量之间的比率非常高的时候,用来提高大表汇总与(或)连接的性能。

   在全表扫描或索引范围扫描都不能提供有效性能的时候,用来提高单表访问的性能。基本上,它们是具有平均选择性的访问,从而需要使用分区功能,但是无法利用分区功能的话,使用物化视图就比较合适了。

   在OLTP环境下,对于那些查询频繁但更新相对较少的表比较适合使用物化视图。在这种环境下,为了确保物化视图的数据完全有效,通常会使用基于事务提交的快速杀心模式来刷新物化视图。

   物化视图通常在数据仓库环境中来存储汇总结果。因为首先:数据通常是只读的;因此,在数据库只是用于修改表的时候,刷新物化视图的开销可以被降到最小并通过时间窗口被隔离。其次,在这种环境下,提升的空间可能会非常大。

 

分享到:
评论

相关推荐

    oracle物化视图_循序渐进学习笔记

    物化视图学习笔记 错误问题分析总结 详细讲解了物化视图的内部构造,从零基础开始学习 重点说明ORA-12034的错误解决方案

    Oracle物化视图使用[文].pdf

    Oracle物化视图使用[文].pdf

    学习分区表,索引,物化视图的使用

    学习分区表,索引,物化视图的使用.pdf

    Oracle物化视图整理

    Oracle物化视图整理,包含所有资料,值得学习

    Oracle物化视图介绍

    Oracle物化视图介绍 根据学习总结并将多篇文章结合而成。

    PostgreSQL物化视图(materialized view)过程解析

    主要介绍了PostgreSQL物化视图(materialized view)过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    sql学习 执行计划利用设计特性改变之4_物化视图影响.sql

    sql学习 执行计划利用设计特性改变之4_物化视图影响.sql

    CDC发布者改变表配置脚本--20140718.sql

    物化视图学习

    oracle materialized view

    物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照(声名:本人刚刚学习物化视图这篇文章来自网络感觉有借鉴...

    达梦数据库用户手册基础学习版.rar

    7.8.1 物化视图的一般限制 264 7.8.2 物化视图的分类 264 7.8.3 快速刷新通用约束 264 7.8.4 物化视图信息查看 265 第 8 章 嵌入式 SQL 266 8.1 SQL 前缀和终结符 ...........................................

    ClickHouse入门学习笔记

    clickhouse入门学习笔记,包括以下内容: 1.基础知识入门 2.数据类型介绍 3.目录结构介绍 4.表引擎介绍 5.常用SQL 6.副本机制 ...13.物化视图 14.MySQL引擎 15.常见问题总结 16.如何进行监控 17.如何进行备份

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    ClickHouse课件1

    背景下诞生的。ROLAP : 传统关系型数据库OLAP,基于MySQL的MyISAM表引擎。MOLAP :借助物化视图的形式实现数据立方体。预处理的结果存在HB

    oracle database 10g 完整参考手册part1

    第24章 使用物化视图 第25章 使用Oracle Text进行文本搜索 第26章 使用外部表 第27章 使用回闪查询 第28章 回闪:表和数据库 第Ⅳ部分 Pl/SQL 第29章 PL/SQL简介 第30章 触发器 第31章 过程、函数与程序包 第32章 ...

    Oracle Database 11g初学者指南--详细书签版

     ·学习效果测试——对学习效果的快速自我评估  ·注意——与所介绍主题相关的额外信息  ·章节测验——每章结束时的测验测试读者对所学知识的掌握程度 作译者 作者  Ian Abramson是IOUG(Independent Oracle ...

    Oracle Olap开发备忘录

    <br>5、开发时直接使用Rolap测试数据就行了,analysis workspace是使用物化视图模拟Molap,两者在开发编程方面完全一致,而后者还额外需要一些处理步骤才能够被Java Olap API访问到,不必麻烦。 <br>

    深入解析OracleDBA入门进阶与诊断案例 4/4

    深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 ... 10.5 使用物化视图进行翻页性能调整   10.6 一次横跨两岸的问题诊断   10.7 总结

    深入解析OracleDBA入门进阶与诊断案例 3/4

    深入解析OracleDBA入门进阶与诊断案例 扫描版 作 者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 ... 10.5 使用物化视图进行翻页性能调整   10.6 一次横跨两岸的问题诊断   10.7 总结

Global site tag (gtag.js) - Google Analytics