分区并行化物化视图

来源:互联网 发布:cygwin 连接linux 编辑:程序博客网 时间:2024/05/22 03:10
-------------------------避免磁盘I/O争用--------------------
磁盘争用通常发生在多个进程视图同时访问一个物理磁盘的情况下。
磁盘I/O操作时,注意事项和提示
1 频繁的批处理需要更大的回滚空间,重做空间,临时表空间
2 频繁的DML处理需要更大的回滚空间,重做空间,临时表空间
3 对大型表的频繁访问,需要更多cpu,内存,临时表空间
4 调整性能较差的系统需要更,需要更多cpu,内存,临时表空间
5 大量较好均衡的磁盘和控制器通常可用提供性能(减少I/0争用)
6 增大磁盘容量也可以加快备份和恢复操作,这是因为可以在磁盘上保存一个备份的副本,而不是在磁带上保存。
7 如果能使用emc或固态硬盘方案,这仍时一种提高oracle性能的最好方法。
要监控争用,可用查看数据库控制中的数据文件的度量。该度量组包含两组度量,文件平均读取时间,文件平均写入时间度量。应用于于数据库关联的所有数据文件。
(1)把磁盘的I/O更平均的分布到多个可用磁盘上,可以有效减少磁盘争用,减少磁盘I/O也可用减少磁盘争用。
(2)可以选择将一个数据文件重新放置到另一个文件系统。
(3)通过移动数据文件来均衡文件I/O。
--------------------------------------------------使用分区来避免磁盘争用---------------------------------------------
范围分区,散列分区,组合分区,列表分区,索引分区
使用分区改善性能和改进数据库的可用性,所有这些功能缩小了管理函数使用范围,从而减少了他们在整体上对数据库可用性的影响。
有选择地压缩表中的分区来节省I/O和磁盘空间
-------可以使用分区表在物理上隔离数据
1可以截取分区和它的索引,而不会影响表的剩余部分
2可以通过alter table 命令的drop partition子句删除分区
3可以删除分区的本地索引
4可以设置分区为nologging,减少大型事物的影响。

分区的主要优点在于可用和表的其他部分分开的管理的能力,例截取分区的能力允许从表中删除大量数据(但不是所有数据),而不会生成任何重做信息。
可以使用exchange partition选项来极大地减小数据加载过程对系统可用性带来的影响。
----------
首先:创建具有和分区表相同列结构的空表,将数据加载到该表中。
然后:分析新的表,在新的表上创建和分区表相同的索引,
最后:使用exchange partition子句改变分区表,交换的分区和填充的新表现在通过分区表可用访问所有加载的数据。
这个步骤期间对系统的可用性几乎没有任何影响,因为他是一个DDL操作。
(1)分区表有助于提高数据库的可用性和可维护性。
(2)分区表还可以改善数据库的性能,可以使用并行查询来访问分区表的每个分区。可用将多个并行执行的服务器分配给表的不同的分区或不同的索引分区
1.如果一个表空间已破坏,能够减少在多个分区中数据损坏的可能性
2.每个分区可用独立备份和恢复
3.可用更大程度地控制分区到物理设备的映射,以平衡I/O负载。
表和他们相关联的索引应当放置在不同物理磁盘上,以便减少文件I/O。

--------------------------------------------------------并行化----------------------------------------------------
使用并行操作可以让多个处理器(以及可能补加的处理器)协同工作,执行单个SQL语句,这个特性提高了数据库密集型的操作。
并且时可态的,能够充分利用您所有的处理器和磁盘驱动。它需要一些额外的开销和管理。但PEO可以提高多数操作性能。
用于执行扫描的进程的数目称为并行度。
(1)parallel_max_servers 每个实例并行进程的最大数
(2)paraller_min_servers每个示例服务器进程的最小值
(3)instance_groups定义激活特定服务器处理的逻辑组

----- 在创建表时使用并行操作
-----在创建索引时使用并行操作
尽管并行查询增加了在修改数据时的操作性能,但会继续记录重做日志,并且造成瓶颈,使用nologging选项,可以在创建表和索引时避免这个瓶颈。
使用nologging可以克服由于重做日志文件连续的写操作造成了I/O瓶颈。
因为对重做日志文件的写操作是连续的。重做日志的写操作可以有效地消除您为语句定义的并行化处理。使用nologging可以强制执行批量操作,以避免记录日志,但单独的insert命令必须仍然写入重做日志。如果使用nologging选项,您必须可以通过归档重做日志文件之外的其他方法来恢复数据。
    使用并行操作创建索引,考虑以下亮点技巧:
(1)如果内存中没有足够的内存可以执行排序操作(sort_area_size)则创建索引时将用到临时表空间。构建临时表空间方式:物理数据文件至少分散分布在与create index语句中并行度一样多的磁盘上。
(2)当增加/启用一张表的主键或唯一键时,您不可能在并行处理中创建相关索引。相反,应当首先并行创建索引,然后使用alter table来增加/启用约束条件,并指定using index。
---- 并行DML语句。
在一个sql会话中并行执行DML语句的操作时,必须启用对并行DML的支持。
(1)如果您没有首先完成事务,您就不能启用一个并行DML会话,您必须首先执行提交或回滚操作
(2)必须通过命令alter session enable parllel dml 启用会话的并行功能。
(3)直到并行事务结束之后,才可读取一张被并行DML修改的表(通过提交或回滚)
当执行DML操作时的约束条件:
1 update,merge,delete操作在没有分区的表上不能并行化处理
2 在远程对象的任何DML操作,集群表,对象列为lob类型的列(其他列可用)表上有触发器,正在执行复制的表不能执行dml操作
3 使用delete cascade删除一张有外键的表的操作也无法被并行化,如果dml中涉及到主键,也就不能删除带有延迟约束或时自引用外键的表。

并行操作的不利方面是大量消耗服务器资源,要监控的最简单的服务器资源时cpu利用率。
数据分布是另一个因素,如果当前存在I/O瓶颈,使用并行操作会恶化这种情况,要确保并行目标对象的数据文件适当分散在磁盘上。

计划(重新设计)数据文件的物理分布是成功并行访问数据的关键为每一个sql语句决定一个合适的并行度,并在创建物理设计时就开始考虑并行化问题,不要依赖于初始化参数来确定并行度。
并行化处理是管理数据仓库或者执行定期维护活动的强大工具。
1 为大表创建或重新创建索引是一种资源集中的操作,其中使用并行操作可用极大地提高性能,索引创建语句要求操作的并行度为6
2 在很小的表非常快的查询中使用并行操作同样也会降低性能,因为协调查询也会消耗性能资源。
3 确保您的数据分布得当,否则并行查询服务器进程可能会加剧已经存在的I/O瓶颈问题
可以通过使用并行操作来获得性能增益的一条潜在规格就是:数据是存储在不同的设备上的,它们应可以独立寻址。

----------------------------------------------------------------物化视图--------------------------------------------------
可以使用物化视图来划分用户针对表执行的操作类型
创建物化视图时,可以指示用户直接查询物化视图。或者依赖oracle的查询的查询重写功能将查询重定向到物化视图,
这种情况下,有数据的两个副本。一个用于服务新事物数据的输入,另一个物化视图用于服务查询。
物化视图可以预先连接表并且预先生成聚集。从而用户查询可以执行尽可能少的工作。
物化视图同时具有表和视图的特性
(1)它和视图相同之处在于它从对一个或多个表的查询中得到结果。
(2)它类似表的地方在于它将视图的结果集维护在一个段中。(占用物理空间)
(3)可以使用物化视图来聚集,预连接,或复制数据
(4)可以使用物化视图来预计算并将聚集的信息存储在一个数据库中,可以在分布式数据库之间动态地复制数据。并能够在数据复制环境中同步数据的更新。
   在复制环境中,物化视图允许本地访问那些通常必须远程访问的数据,一个物化视图可能要基于另一个物化视图。
(5)物化视图有助于提高涉及聚集(包括求和,计数,平均值,方差,标准差,最小值,最大值)或表连接的查询性能,oracle的查询优化器将会自动意识到可以使用物化视图来满足查询。
   一个称为查询重写的特性可以使用初始化参数配置优化器来自动重写查询,以便在任何可能的时候使用物化视图。

1 bulid immediate 命令选项将数据立刻装载到物化视图
2 bulid defrred 预先创建物化视图而并不向其中它填充数据,直到第一次使用它的时候才填充数据,直到执行了dbms_mview.refresh 程序包,并且在返回任何数据之前,用户必须等待物化视图的填充。

更新形式:
1 fast更新中,使用物化视图日志来跟踪自从上次更新以来表中出现的数据变化。
2 complete中,每次执行更新时将会完全更换物化视中的数据。
3 force更新过程首先评估能否运行fast更新,如果不能运行它,将会执行complete更新
4 如果将never指定为更新选项,将不会更新物化视图。

如果没有创建和填充物化视图日志,只能执行complete更新。

dbms_mview程序包用来执行管理操作,如评价,注册或更新物化视图。
使用dbms_mview.refresh两个主要参数物化视图名称,和使用的更新方法。
c 用于cmplete f 用于fast   ? force
execute dbms_mview.refresh('mv1','mv2','mv3','cfc');
对于两个相关联的均有基于自身的简单物化视图的表,可能并没有在他们的物化视图中执行两个表之间的引用完整性。
---------更新组
更新组提供了针对引用完整性问题的另一种解决方法。
可以将相关的物化视图聚集到更新组中,更新组的目的时协调它的成员的更新进度。
通过dbms_refresh程序包可以执行更新组的操作。
execute dbms_refresh.make(name=>'emp_group',list=>'local_emp,local_dept',next_date=>sysdate,interval='sysdate+7')
-------物化视图日志
物化视图日志是一个表,用来在物化视图中维护主表改动的记录。
create materialized view log on employee tablespace data_2;
可以将物化视图日志的pctfree值设置得很低,而将pctused值设置得很高。物化视图日志的大小依赖于每次更新过程中将会处理的更改数量。
为了查看可能用于物化视图的更新和重写功能的类型,可以查询mv_capabilities_table表。
-------------------查询重写
可以使用物化视图来影响优化程序,以便它改变查询的执行路径,这种特性称为“查询重写”
为了有效地使用查询重写功能,应该创建一个维,用来在表的数据中定义分级结构。
物化视图用于查询重写,必须将该物化的所有主表放置在物化视图的模式中,并且必须拥有query rewrite系统权限。
为了能够进行查询重写,必须设置如下的初始化参数:
1 optimizer_mode=all_rows或first_rows
2 querey_Rewrite_enable=true
3 querey_rewrite_integrity=stale_tolerated,trusted,enforced
  (1)enfore  物化视图日志 oracle执行并保证一致性和完整性
  (2)trusted  支持查询重写用于声明的关系
  (3)stale_tolerated即使在物化视图和他们的底层数据不一致的情况下支持查询重写。
可以使用dbms_mview,explan_Rewrite程序来检查重写是否可以用于查询以及会涉及哪些物化视图
explain_Rewrite需要三个输入参数,查询,物化视图的名称,语句标识符并且可以将它的输出存储在一个表中。
p248使用物化视图快照来复制数据

0 0
原创粉丝点击