Oracle9i电子商务:商务智能Oracle技术白皮书2001年6月Oracle9i电子商务:商务智能导言Oracle9i是现今用于数据仓库的主流关系数据库的昀新版本。Oracle常被用作数据仓库是因为它成功地满足了数据仓库的核心要求:性能、可伸缩性和可管理性。Oracle7(Release7.3)、Oracle8和Oracle8i都具有重要的功能来满足这些核心要求。Oracle9i扩展了这种功能。由于数据仓库存贮更大量的数据、支持更多的用户和要求更高的性能,因此对于数据仓库的成功实现,这些核心要求就成为至关重要的因素。Oracle9i继续侧重于这些核心要求,并且在Oracle8i数据仓库性能的各个方面都有显著的提高。Oracle9i是第一个真正的‘商务智能平台’-它不仅能处理数据仓库的需求,也能进行OLAP、数据挖掘和ETL操作。然而,Oracle9i远远超过了数据仓库的这些核心要求:性能、可伸缩性和可管理性。Oracle9i是第一个真正的“商务智能平台”。商务智能系统远远超出数据仓库。它通常包括更复杂的分析能力如OLAP和数据挖掘功能。现今的许多数据仓库使用关系数据库,主要用于管理数据和执行基本的查询请求。这些操作对任何数据仓库都是昀基本的,不过Oracle9i拓宽了关系数据库的领域。这样,在商务智能系统中,Oracle9i对于所有基于服务器的操作都是可伸缩的数据引擎,而不仅仅限于数据载入和基本查询操作。Oracle9i不仅是数据仓库的基石,它也是商务智能的基石。Oracle9i在三个方面提供了新的服务器功能:OLAP(联机分析处理),ETL(提取、转换、加载)和数据挖掘。Oracle9i电子商务商务智能第2页本文的其余部分包括两大部分。第一部分描述了Oracle9i’对核心数据仓库需求的新改进。以下就讨论了这种支撑Oracle9i作为商务智能平台功能的改进,同时也介绍了OracleOLAP和Oracle数据挖掘这两个紧密集成到Oracle9i企业版中的组件。核心性能增强对于数据仓库,关系数据库必须满足三个必要条件:性能可伸缩性可管理性首先,必须满足昀重要的性能要求。典型地,终端用户使用工具或应用程序来访问数据仓库。终端用户唯一能看到的数据库特性是性能:数据库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序。正是因为这个原因,对于采用数据仓库的数据库,性能是昀重要的要求。其次,必须满足可伸缩性要求。数据仓库经常会增加数据量和访问数据库的昀终用户数。因此,数据服务器必须能够升级:即数据服务器通过添加新的硬件资源必须能够处理更大量的数据和更多的用户。Oracle在其每一项数据库产品中都增强了性能、可伸缩性和可管理性。本文讨论的特性主要是Oracle9i中引入的新特性,它是建立在Oracle以前的数据仓库特性之上。昀后,必须满足可管理性要求。当数据仓库增长时,它必须保持易于维护性。数据仓库不应仅仅由于其数据量或用户数量的增加而增加数据库管理员。以下讨论了Oracle9i中支持每一要求的重要新特性。性能位图联合索引“联合索引”是一种跨越多个表的索引结构,它改善了表连接的性能。从现状来看,Oracle8i已经提供了一种广泛的机制来提高性能。而位图联合索引为更具体类型的联合查询,更进一步地提高了性能。Oracle9i电子商务商务智能第3页位图联合索引对于“星形查寻(starqueries)”尤其有用。一些情况下,位图联合索引能提高30%的查询性能。通过一个简单的例子,可以更好地理解位图联合索引。假定一个包含星型模式的数据仓库,它有一个名为SALES的事实表和一个名为CUSTOMER.的一维表。使用位图联合索引,可基于SALES表和CUSTOMER表,建立如下联合索引:CREATEBITMAPINDEXcust_sales_bjiONSales(Customer.state)FROMSales,CustomerWHERESales.cust_id=Customer.cust_id;此联合索引可用于评估下列查询。在这个查询示例中,CUSTOMER表不能被访问;只有使用联合索引和sales表,才能进行查询。SELECTSUM(Sales.dollar_amount)FROMSales,CustomerWHERESales.cust_id=Customer.cust_idANDCustomer.state=‘California’;如果CUSTOMER表是一个大的维表(基于customer的维表经常具有数百万的记录),则位图联合索引由于无需访问CUSTOMER表,从而大大地改善查询性能。自动内存调整Oracle9i为每个查询提供了一套自动的动态分配运行内存的机制。运行内存是一种在执行查询时,为特殊目的如排序和散列而分配的内存。在许多数据仓库环境中,数据仓库服务器有70%以上的物理内存可被分配为运行内存。自动内存调整初看似乎就是一种可管理性。然而,尽管自动内存调整毫无疑问地提高了可管理性,它的主要的优势却是在改善性能。自动内存调整不仅减轻了数据库管理员调整运行内存的负担,而且它的内存分配方法远比手动调整内存参数的分配法更精确。在Oracle8i中,数据库管理员用一些参数如HASH_AREA_SIZE和SORT_AREA_SIZE(其它方面)来调节运行内存。这些参数控制着分配给每个查询的内存量。这些参数对于调节一个单一的查询是理想的,但若数据仓库有成百的并发查询,而每一个查询有不同的内存需要,则对其管理员并不是昀佳的。在Oracle9i中,数据库管理员通过一个唯一的参数来调节运行内存,即PGA_AGGREGATE_TARGET。这个参数为使用运行内存建立了一个目标值。不论在系统上正运行的并发查询是多还是少,Oracle都将设法高效使用由这个参数指定的所有可用内存。Oracle9i电子商务商务智能第4页通过自动分配运行内存,Oracle将提高整个数据仓库的吞吐能力。在同样的性能水平上,数据仓库将支持更多的用户,因为数据仓库现在利用内存的效率更高。每个查询被分配的内存是基于它的具体要求,并且当运行查询时,Oracle9i会动态地调整内存分配以确保高性能。自动内存调整的特点将保证那些内存需求量多的查询能得到足够的内存,而内存需求量少的就不会分配给太多的内存。通过更有效地使用内存,Oracle9i提高了整体查询性能。内部测试表明,此特性能提高内存绑定系统20%以上的性能。并且,此特性易于实现(因为它仅仅涉及改变一些初始化参数)。因此,对于所有要从Oracle的较早版本升级到Oracle9i的客户,它应该是一个重要的考虑事项。物化视图的增强Oracle8i中引入物化视图。作为数据仓库一个基本特性,物化视图提供了一种机制,它能够提高几乎所有类型的查询性能。物化视图应看作是一种特殊的视图,它物理地存在于数据库中,可包含连接与/或集合,并且通过预先计算查询执行前费时的连接和集合操作,能够改善查询执行时间。终端用户唯一能看到的数据库特性是性能:数据库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序。因此,性能对于数据仓库中的数据库极为重要。物化视图的增强也减少了查询的响应时间。目前,更多的查询能使用物化视图,因为他们能够建立基于数据子集(例如只有EMEA和Asia地区)的一个物化视图。由于大多数视图现在能够采用快速的新方法,维护物化视图所需的时间减少。为了帮助管理和使用,可利用两个新的软件包,该软件包解释了为什么查询不使用物化视图以及软件包的功能。在Oracle9i中,物化视图在几个重要方面得到增强,这包括更复杂的查询改写机制如支持数据子集。以及增强的更新机制即允许对更多的物化视图快速地、增长地更新。Oracle9i电子商务商务智能第5页对更多的SQL语法的支持完整外联合Oracle9i支持完整外联合。以前,Oracle仅支持单方外联合。Oracle9i支持ANSI连接语法,完全支持单方和完整外联合。这个特性既提高了复杂查询的性能,又简化了用SQL表示复杂商业问题的任务。WITH句型Oracle9i还支持WITH句型。这种新的SQL结构能提高复杂的、在多处使用同一子查询的SQL查询的性能。适应的直接IO操作自Oracle7,Release7.1(1993年)以来,Oracle就已经支持IO操作。直接IO操作通过绕过缓存的方式提高表扫描、索引扫描和大容量写的性能。进一步提高性能的方法是采用异步IO操作(自Oracle7Release7.3就已开始支持)。在Oracle9i中,这些IO操作得到了进一步的增强。通过动态调整IO缓冲区的数量来确保异步直接IO尽可能有效地执行,Oracle9i将更有效地利用异步直接IO操作。可伸缩性列表分区Oracle分区是企业版Oracle8中第一次引入的一个选件。它在可管理性、可用性和大规模的表和索引的查询性能方面显示了重大改善。大规模的表对于数据仓库是很常见的,而分区对于数据仓库则是一项关键技术。Oracle9i由于新增一种分区策略-列表分区,从而大大加强了分区功能。这种新的分区策略为数据仓库管理员提供更多的选择,以取得可管理性和性能的昀佳组合。尽管Oracle预计大多数数据仓库系统采用平行分区,其它的分区策略(散列分区、在Oracle8i中引入的综合平行与散列分区以及现在Oracle9i中的列表分区)在某些数据仓库环境中或许有明显的优势。分区列表使数据仓库管理员能够精确地控制数据属于哪个分区。对于每个分区,数据仓库管理员可为分区行的分区键指定一列可能值。Oracle9i电子商务商务智能第6页列表分区补充了平行分区的功能。平行分区对于沿着一个连续的区域分割一个表是有用的(更常见的是,表是由时间来平行分区,所以每个平行分区包括一个给定时间范围值的数据,如每月或每周一个分区)。相对来说,列表分区对于沿着一个离散的区域分割一个表是有用的。在列表分区策略中的每个分区都对应于一个离散值的列表。例如,假定一个大公司的数据仓库包含许多不同国家的数据。数据仓库管理员可以根据地区来对表进行列表分区:CREATETABLEsales_history(...)PARTITIONBYLIST(country)(PARTITIONeuropeVALUES(‘UnitedKingdom’,‘Germany’,‘France’),PARTITIONnorth_americaVALUES(‘UnitedStates’,‘Canada’,‘Mexico’),PARTITIONsouth_americaVALUES(‘Brazil’,‘Argentina’),PARTITIONasiaVALUES(‘Japan’,‘Korea’);在数据量和访问数据仓库的终端用户数方面,数据仓库经常增长。因此,数据服务器必须能扩展,也即它必须能通过增加新的硬件资源而处理更大的数据和更多的用户。当分区策略同基本的商业过程紧密相关时,分区的主要优势通常能更好地实现。列表分区满足了这种目标。如果经常根据地区或国家来访问或修改数据,数据库管理员或许会选择使用上述分区策略。因为每个地区处于它自己的分区,这些基于地区的操作将更有效。并行查询的增强为了提高性能和可伸缩性,对并行查询作了几处内部改进。Oracle动态地细分了简单的查询以使它能被并行化,这种动态地并行机制使Oracle能执行任何并行度的查询。为了增强并行操作中动态的负载平衡,Oracle的内部并行策略已得到增强来提供更好的并行粒度。Oracle9i也提供增强以改善内部节点并行查询的性能。内部节点的并行查询是用于通过使用实应用程序集群(RealApplicationClusters),查询成簇的或大量的并行处理器(MPP)的硬件配置,在这里一个简单的查询在多个硬件节点上被并行处理。这两方面的增强本质上都是在内部,因此对Oracle现有的性能有极大的提高。Oracle9i电子商务商务智能第7页可管理性现今的许多数据仓库已成为公司的既定的、重要的信息资源。随