再上一篇:13.4再论分区和性能
上一篇:13.5审计和段空间压缩
主页
下一篇:14.1何时使用并行执行
再下一篇:14.2并行查询
文章列表

13.6小结

Oracle 9i 10g编程艺术:深入数据库体系结构

对于扩展数据库中的对象来说,分区极其有用。这种扩展体现在以下几个方面:性能扩展、可用性扩 展和管理扩展。对于不同的人,所有这3 个方面都相当重要。DBA关心的是管理扩展。系统所有者关系可 用性,因为停机时间就意味着金钱损失,只有能减少停机时间,或者能减少停机时间带来的影响,就能增 加系统的回报。系统的最终用户则关心性能扩展。毕竟,没有哪个人喜欢用慢系统。
我们还了解到这样一个事实:在一个OLTP系统中,分区可能不能提高性能,特别是如果应用不当, 甚至会使性能下降。分区可能会提高某些类型查询的性能,但是这些查询通常不在OLTP系统中使用。这一 点很重要,一定要了解,因为许多人总是想当然地把分区和“性能提升“联系在一起。这并不是说不应该 在OLTP系统中应用分区;实际上,在OLTP环境中,分区确实能提供许多其他的优点,只是不要指望分区 能带来吞吐量的大幅提升。分区能减少停机时间,可能会得到同样好的性能(如果适用适当,分区不会使 速度减慢)。应用分区后,管理可能更为容易,这可能会带来性能提升,因为能由DBA执行的一些维护操作 会更多地由他们完成。
我们分析了Oracle提 供的各种表分区机制,包括区间分区、散列分区、列表分区和组合分区,并讨 论了何时使用这些分区机制最合适。然后用大量篇幅来介绍分区索引,并研究了前缀索 引和非前缀索引以 及局部索引和全局索引之间的差别。在此分析了数据仓库中结合全局索引的分区操作,并讨论了资源消耗 和可用性之间的折中。
我认为,对越来越多的人来说,随着时间的推移,这个特性将显得更重要,因为数据库应用的大小和 规模都在增长。随着Internet的发展,由于它广泛需要数据库的支持,再加上法律方面的原因,因此需要 更长时间地保留审计数据,这些都导致出现了越来越多极大的数据集合,对此,分区是一个很自然的工具, 可以帮助管理这个问题。

第14章 并行执行

并行执行(parallel execution)是Oracle企业版才有的特性(标准版中没有这个特性),最早于
1994年在Oracle 7.1.6中引入。所谓并行执行,是指能够将一个大型串行任务(任何DML,或者一般的 DDL)物理地划分为多个较小的部分,这些较小的部分可以同时得到处理。Oracle中 的并行执行正是模拟
了我们在实际生活中经常见到的并发处理。你可能很少看到一个人单枪匹马地盖房子;更常见的是由多个 团队并发地工作,迅速地建成房屋。采 用这种方式,某些操作可以划分为较小的任务,从而并发地执行。 例如,铺设管线和电路配线就可以同时进行,以减少整个工作所需的总时间。
Oracle中的并行执行遵循了几乎相同的逻辑。Oracle通常可以将某个大“任务”划分为较小的部分, 并且并发地执行各个部分。例如,如果需要对一个大表执行全表扫描,那么Oracle完全可以建立4个并行 会话(P001~P004)来一起执行完全扫描,每个会话分别读取表中一个不同的部分(既然这样能更快地完成 任务,没有理由不这样做)。如果需要存储P001~P004扫描的数据,这个工作可以再由另外4个并行会话
(P005~P008)来执行,最后它们可以将结果发送给这个查询的总体协调会话。
并行执行作为一个工具,如果使用得当,可以使某些操作的响应时间大幅改善,使速度呈数量级增长 。 但是,如果把并行执行当作一个“fast=true”型的提速开关,结果往往适得其反。在这一章中,我们并不 打算明确地解释Oracle中如何实现并行查询,也不会介绍由并行操作可能得到的多种计划组合,在此不会 讨论诸如此类的内容。我认为,这些内容已经在各种Oracle手册(Oracle Administrator’s Guide、Oracle Concepts Guide,特别是Oracle Data Warehousing Guide)中得到了很好的说明。这一章的目标只是让 你对并行执行适用于哪些类型的问题(以及对哪些类型的问题不适用)有所了解。具体来讲,我们会介绍 何时使用并行执行,在此之后,还将介绍下面的内容:
并行查询:这是指能使用多个操作系统进程或线程来执行一个查询。Oracle会发现能并行 执行的操作(如全表扫描或大规模排序),并创建一个查询计划来实现)。
并行DML(PDML):这在本质上与并行查询很相似,但是PDML主要是使用并行处理来执行修 改(INSERT、UPDATE、DELETE和MERGE)。在这一章中,我们将介绍PDML,并讨论 PDML所固有 的一些限制。
并行DDL:并行DDL是指Oracle能并行地执行大规模的DDL操作。例如,索引重建、创建 一个新索引、数据加载以及大表的重组等都可以使用并行处理。在我看来,这正是数据库中并 行化的“闪光之处”,所以我们会用很多的篇幅重点讨论这方面内容。
并行恢复:这是指数据库能并行地执行实例(甚至介质)恢复,以减少从故障恢复所需的 时间。
过程并行化:这是指能并行地运行所开发的代码。在这一章中,我会讨论两种过程并行化 方法。第一种方法中,Oracle以一种对开发人员透明的方式并行地运行开发的PL/SQL代码(开 发人员并不开放代码;而是由Oracle 透明地为其并行执行代码)。此外还有另一种方法,我把 它成为“DIY并行化”(do-it-yourself parallelism),即开发的代码本身被设计为要并行地执 行。