1、1 性能保障方案1.1 从构架设计解决系统性能问题一个好的构架设计是保证系统今后可靠、稳定、高效运行的基础。从构架设计上考虑系统性能问题,其目标是保证如下指标: 并发用户数 吞吐量 可靠性 性能即:让系统更快更好地为更多的用户提供服务,并且保证服务过程不会中断。为了达到以上指标,在设计中可以采用如下方案:1.1.1 构架设计性能保障原则(1)面向性能的业务流程分析明确性能问题在整个软件生产与运行过程中的重要意义,在考虑架构分析与设计的时候,出发点与指导原则是帮助用户使用某种技术手段来高效地完成业务流程,其本质是“ 高效的业务流程” ,而不是一个计算机系统或计算机应用。在这一原则之下,我们的应用
2、开发是围绕着开发高效“业务流程”展开的,Java或其他技术只是我们的一种技术手段而已。避免由于具体的技术实现方案对业务流程分析中的性能指标的束缚。(2) “化整为零” 的领域模型设计领域模型分析与设计过程中,抽取,抽象出稳定的领域模型,并且剥离出严重影响系统性能的长事物处理与批量事物处理,针对长事务处理采用“化整为零”的处理模式,将集中式处理过程中的具体环节分散到日常的业务处理功能中,对于批量业务处理采用多线程并行独立处理。同时这种“化整为零”领域模型设计在面对业务流程与模型的自然变化面前,可以通过最少,最小的程序变动,降低对应用性能的影响。(3)面向性能的架构关键技术选型在架构设计的时候要时
3、刻围绕着系统的 QoS 需求,并将这些需求转化到Service 的设计上, 真正做到“面向性能的架构关键技术选型 ”,如下内容概述出在架构设计国政部分关键技术选择是如何围绕“性能”进行考虑的。RIA(Rich Internet Application)客户端架构在保证良好的用户体验的同时,处理 UI 界面的展现与渲染过程中充分利用客户机的运算与处理能力。数据交互格式定义精简的客户端与应用服务器端数据交互格式,在不丢失数据语义的同时,尽量降低在网络中传输的数据内容。自动事物管理利用面向切面的技术进行事物管理的切入,从而实现自动化的事物处理,避免编程式事物导致的事物与数据库连接问题 并行处理并行处
4、理是通过利用 J2EE 层执行模式的多线程和多 CPU 特点来提高性能。与使用一个线程或 CPU 处理任务相比,以并行方式处理多个子任务可以使操作系统在多个线程或处理器中进行分配这些子任务。 异步处理异步处理只处理那些非常重要的任务部分,然后将控制立即返回给调用者,其他任务部分将在稍后执行。异步处理是通过缩短那些在将控制返回给用户之前必须处理的时间来提高性能的。虽然都做同样多的事情,但是用户不必等到整个过程完成就可以继续发出请求了 缓存机制缓存中存放着频繁访问的数据,在应用的整个生命周期中,这些数据存放在持久性存储器或存放在内存中。在实际环境中,典型的现象是在分布式系统中每个 JVM 中有一个
5、缓存的实例或者在多个 JVM 中有一个缓存的实例。缓存数据是通过避免访问持久性存储器来提高性能的,否则会导致过多的磁盘访问和过于频繁网络数据传输。在架构设计过程中,针对待实现系统中的实际业务特色,剖析出客户端与中间件中频繁使用的但又很少变化的数据。通过一些技术手段,将这些数据在合适的时机(系统启动,用户登录,第一次使用等)以一定的数据结构存放客户端或者中间件内存中。避免每一次使用都进行发送远程调用请求或者数据库访问,提高系统的运算与处理速度。 资源池,对象池在应用系统运行过程中,特别对于一个高并发的应用系统资源的频繁地创建都一个高成本的动作,在架构设计过程中对数据库连接,业务逻辑组件等高并发,
6、高成本的对象与资源采用池化技术,在应用系统启动过程中以对象池,资源池的方式,初始化到池中,降低频繁的创建与销毁,同时也降低内存碎片的产生(4)持续性的性能管理持续性的性能管理主要是指,在系统构建过程中持续性地性能测试。持续性能管理的前提条件是有一套完整定义的单元测试用例,健壮的测试框,以及明确的,量化的性能需求。除了必不可少的单元测试,集成测试,压力测试以外,持续性的性能管理更突出了自动化测试的重要意义,自动化方式可以创建重复的测试过程并迅速报告应用代码的质量。只有自动化方式才能保证正确地遵循这些测试过程,并且保证准确和一致地测试应用组件。1.1.2 分层的设计方法分层应用是将组件等分隔到不同
7、的层中,每一层中的组件保持内聚性,并且大致在同一抽象级别。每一层都应与它下面的各层保持松散耦合,避免使较低级别依赖于较高级别。通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。分布式服务层依赖较低层,但是较低层的细节不会显示在包含应用程序和业务逻辑层的较高层中。应用程序开发人员在较高抽象级别工作时不必考虑诸如 TCP/IP 数据包和网络字节排序之类的细节。它还可以在替换较低层时不对较高层造成任何影响。采用从整体架构层次来看,系统可分为表示层、业务逻辑层、数据持久层。见下图:JDBCA p p l i c a t i o n S e r v e rJAVAB r o
8、 w s e rB r o w s e rD a t a B a s eServletW e b S e r v e rX M LJ S P客 户 端 数 据 库业 务 逻 辑展 现 逻 辑图 1-1 应用软件层次架构图1)表示逻辑(客户层)为第一层:它的主要功能是实现用户交互和数据表示,为以后的处理收集数据,向第二层的业务逻辑请求调用核心服务处理,并显示处理结果。2)业务逻辑(服务器组件)为中间层:这些组件由中间件管理,实现核心业务逻辑服务并将这些服务按名字广播,管理并接受客户的服务请求,向资源管理器提交数据操作,并将处理结果返回给请求者即客户或其他服务器。3)数据(资源管理器)构成模型的第
9、三层。比如关系数据库,负责管理应用系统的数据资源,完成数据操作。服务器组件在完成服务的过程中通过资源管理器存取它管理的数据,或者说请求资源管理器的数据服务。在三层客户机/服务器模式上架构的应用系统不但具备了大型机系统稳定、安全和处理能力高等特性,同时拥有开放式系统成本低、可扩展性强、开发周期短等优点。对于其中最关键的业务逻辑层,又可以分为控制框架层、业务组件层、数据访问层和相关资源层。控制框架层管理业务组件的装配和调用,是业务逻辑层的核心引擎。业务组件层集中了各种实现业务逻辑的组件;数据访问层封装对数据存储的各类访问操作;相关资源层包括了各种相关应用支撑功能,如:缓存、对象池、线程池、消息、日
10、志等。控制框架层与相关资源层构成系统的分功能属性部件,业务组件层和数据访问层构成系统的功能属性部件。通过系统分层,改变了传统信息系统的大一统结构,区别系统的功能属性与非功能属性,将不同的功能交给相应的功能组件来完成。在单笔业务或者小用户量的情况下,分层的系统架构并不具备优势,其关键优势在于对并发的大数据量业务的响应和处理方面,通过在各层中合理的分布系统压力,改变了传统信息系统压力集中的缺点。同时,采用分层技术架构,可以根据系统性能的具体需求,对不同的层次进行有针对性的优化处理。1.1.3 业务同步处理与异步处理相结合的系统体系架构传统的业务处理模式通常采用直接的请求/应答方式进行同步处理,在业
11、务高峰发生的时候,由于对资源的集中使用造成系统的响应速度急剧下降。通过在系统架构中加入异步业务处理模式的支持,将一些业务通过异步方式放入工作队列中,在系统空闲的时候再从队列中获取工作任务进行处理,减少对资源的集中占用,保证在业务高峰期的系统响应性能。1.1.4 缓存、池化技术的使用在实际业务处理过程中,数据库访问、网络传输以及新建对象都是成本较高的资源开销,对于性能要求很高的业务系统来说,采用合理的技术减少高开销的资源访问是必须考虑的内容。采用缓存、池化技术,将频繁访问的资源放在 I/O 性能较高的载体上,减少集中的和缓慢的 I/O 访问,从而达到提高系统性能的目的。图 1-2 缓存、池化技术
12、1.1.5 分布式业务处理模式多层体系结构将业务逻辑与数据存储和显示分开,使得系统层次更加分明,系统鲁棒性、可扩充性、安全性得到大大提高,同时它也使得分布式计算得到广泛应用,使得系统的性能由于采用分布式计算而大大提高。采用分布式计算有着多方面的技术优势,包括: 逻辑封装性这是分布式模式中最具诱惑力的特征,这种模式将以往 C/S 结构中全部由客户机完成的事务逻辑中的一部分从客户端分开。当使用户需要动态改变一个应用软件的商业逻辑规则时,只要改变一个应用服务器的程序即可,而不需要更改客户端用户界面,这样就无需中断用户,为最终用户重新发放新的界面软件或亲自上门为其安装调试并重新培训用户,提高了工作效率
13、。这种多级模式对于需经常、快速改变应用程序的行业很有帮助。 性能性能的提高是三级模式最终被用户采用的主要原因。将复杂的应用和商业逻辑分离出来由专门的一台或多台应用服务器来处理,既可以提高应用的执行速度,也可以减少网络调用的通讯量。不过这种性能提高是有一定代价的。这就是开发时要将应用逻辑分割为客户端逻辑和服务器端逻辑,这就增加了设计的复杂性。 安全性管理在分布式计算模式中,由于所有的商业逻辑都驻留在服务器端,信息管理部门就可以十分方便地监控服务器的运行情况,很容易地控制访问服务器以及与服务器应用打交道人员的数量。这可以大大简化管理员对系统的管理,减轻系统维护的工作量,并确保系统的可靠运行。针对金
14、财工程的特点,在构架系统时,应充分考虑分布式计算的特点,在数据大集中的模式,通过应用服务器及其群集技术,将计算逻辑合理分布以保证系统的性能。1.2 从应用软件解决系统性能问题1.2.1 应用软件的设计应基于构件,尽量简单化应用系统的设计应利用基于构件的开发理念,增加程序代码的可重用性。此外,程序应使用简单的逻辑和算法来获取结果,避免复杂以及深层次的对象调用,提高运行效率,以获得快速的相应速度。1.2.2 应用软件应该以分阶段的方式来构件化已存在的遗留系统历史遗留系统的重构是高风险和大工作量的任务,同时与遗留系统的业务和数据衔接是一个对应用软件性能影响重大的环节。因此,最好以分阶段的方式逐步用新
15、的构件替换遗留系统的各个组成部分,以降低风险,减少工作量,逐步提高系统的相应速度。1.2.3 应用软件编写的质量直接关系到系统的性能。编程的质量有经验的积累也有个人的技巧,在一个用软件整个开发过程的指导思想是:“按照规范来进行开发,而不是按照个人习惯,应用服务器等其他因素来进行开发” 。与此相对应我公司专门针对开发工具以及使用的数据库的特点制定了相关规范,见下表:1 Pascal 编码规范 PR_C_2000_0012. Java 编码规范 PR_C_2001_0023. PowerBuilder 编码规范 PR_C_1999_0034. Visual C+编码规范 PR_C_1999_004
16、5. Visual Basic 编码规范 PR_C_1999_0056. 数据库服务器段软件开发规范 PR_C_2000_0067. Delphi 编码规范 PR_C_2001_0078 C+EXPORT LANG改为: LANG=zh_CN.hp15CN;export LANG在 ORACLE 用户下,vi .profile 添加上述内容增加下面这行到/etc/profilestty -istrip -parity cs8均衡器集群安装问题1、确定集群主管理节点,在此节点安装和配置集群,其它节点只安装软件即可。2、所有物理安装节点必须配置缺省网关 3、使用安装阶段性能相关内容 优化建议web
17、logic 软件代理对核心业务线不适合 4、unix 环境尽量使用 nohup 方式启动各进程 5、尽量采用 f5 等负载均衡器做分发。f5 安装问题一般 f5 会安装在应用服务器前,如果两台可按主备方式。SymantecHP远远程灾备Oracle对应用级容灾要做远程容灾应用级测试一般厂商到场安装,建议进行演习测试。Neusoft Neteye SOCHP OpenviewCA UnicenterIIT运维管理 IBM Tivoli需要提供监控内容部分需要讨论确定确认具体监控内容:1、主机 cpu、内存、i/o 等;2、编写对中间件、数据库、应用的监控脚本Symantec netbackpib
18、m tsm备备份 HP data protector备份实施内容确定1、创建几个备份脚本,包括全备份,归档备,文件备等。2、演习测试1.3.3 配置与优化阶段这个阶段是在平台环境基本搭建好后必须开展的工作,也是在应用部署前首要的任务。本节提供的都是多年来在建设大量项目中的经验积累,涉及多种软、硬件平台的优化。通过这种配置、优化后对常见大型应用可基本保证不出大的问题。1.3.4 应用部署与测试阶段这个阶段是在软件和集成都完成后,把软件部署在新的集成平台上并做压力测试的过程。在这个过程中需要对现有的环境做进一步优化。上线前准备阶段这个阶段是上线前的对系统做最后检查的阶段。需在各方面条件都满足要求的
19、条件下才能上线。1.4 系统性能调优实用技术性能优化有很多技术,包括各个厂家的技术,也包括在实际调优过程中积累的经验。比如在数据库设计,如:表和索引等设计的时候,充分利用数据库的特色和性能,使程序运行效率最好;中间件也是一样,java 程序开发的时候往往也会利用应用服务器的特性使程序效率最高。另外,对各平台软、硬件及应用性能的监控和性能诊断能力已成为系统整体性能的关键保障。下面将分别展开1.4.1 数据库配置及优化方法数据库是应用的核心,做好数据库的设计与优化是保证系统性能的关键。数据库的设计和优化通常包括如下内容: 数据库的设计,包括表的设计、索引的设计等。表的设计要兼顾灵活性和易用性; 根
20、据表、索引的设计情况,估算每个表的基准数据量及大小,还有表数据的增长情况,合理设计每个表的参数值。对于数据量大的表,采用分区表和物化视图等技术,以及在设计上考虑历史表等方法来提高性能; 根据表、索引的设计情况,合理设计表空间的大小、在磁盘上的分布以及相关的参数; 合理调整数据库的初始化参数以及操作系统的内核参数等; 合理规划客户端/连接池对数据库的连接数目; 根据现场实际情况,定期监测和检查数据库的使用情况,并对不合理参数做出调整。同时,也定期对数据库中的碎片进行整理。本系统规模大(海量数据) ,连接点、实时性要求高,因此如何处理海量数据,是保证系统性能的关键。本节根据海量数据的特点阐述系统性
21、控制措施。本项目采用 Oracle 数据库,因此,数据系统性能的控制将结合 Oracle 展开。“海量”数据库的概念一直在不断变化,1995 年时,容量大于 100GB 的数据库就被认为是大型数据库。仅仅几年之后,数万亿字节的数据库已投入市场。VLDB 是超大型数据库的(very large database)简称。1.4.1.1分区表和索引(partition table and index)技术根据实际经验,在一个大数据库中,数据库空间的绝大多数是被少量的表所占有。如何简化大数据库和管理,如何改善应用的查询性能,一般可以使用分区这种手段。所谓分区就是动态地将表中记录分离到若干不同的表空间上
22、,使数据在物理上被分割开来,便于维护、备份、恢复、事务及查询性能。当使用的时候可建立一个连接所有分区的视图,使其在逻辑上仍以一个整体出现。ORACLE 引进了数据分区的技术,以加强对 VLDB 的支持。当表的数据增大时,数据的载入/载出、备份/ 恢复占用了大量的时间,也使数据库管理员的任务变得复杂、繁琐,直接影响系统的可用性。所以,为了便于管理、提高关键数据的可用性、提高查询的性能,ORACLE 可基于一定的关键值把表和索引分为若干可管理的小块 分区,由于每个分区的操作是相对独立的,从而避免因一部分数据的无法访问而影响其他分区的数据的使用。这带来两方面的好处:第一、提高性能,只对存有被查数据的
23、分区进行查找,从而加快速度;第二、高可用性,备份/恢复可以以分区为单位进行,减少管理时间;另外,数据是基于分区管理的,硬件的失败只会影响本地分区,不影响其他分区上的数据的操作,从而提高系统的可用性。这种分区的机制,对应用系统是透明的。图 1-3 数据库分区技术Oracle 的分区( Partitioning Option)方式有 hash,range 和 composite 多种。这种灵活的分区方式好处是: 目标准确的数据服务器管理 高可用性 应用性能提高由于结构的限制,多数服务器的分区导致为提高性能以牺牲目标准确的数据服务器管理和高可用性为代价。必须在它们之间作出选择。Oracle 的com
24、posite 分区方法则消除了这种情况。采用 Oracle 的分区,数据的存储、管理、访问和备份都完全按你的业务要求。例如许多公司喜欢按日期分区,当数据到达一定的日期后,数据就不能再被查询。Oracle 的 Range 分区使过期的分区,仍然可被查询。Oracle 的分区显著地改进了数据的可用性。单一分区可被单独离线,不影响其它数据运行。查询永远是在所有分区正常的情况下才进行。Oracle 决不会提供不完整的查询结果。1.4.1.2并行化(parallelism )技术具有大内存与 CPU 资源的巨型系统已经出现十几年了,这些系统多采用MPP 或 SMP 结构,具有大计算能力,并且有很好的扩充
25、性,然而,如果应用软件不能有效地利用这些计算机的特点,那么计算的能力将受到限制。Oracle 早在 7. 1 版本中就引入了并行查询选项(PQO) ,以充分使用这些系统中可用的硬件资源。Oracle 并行查询选项允许长时间运行的 SQL 操作(主要是查询) ,以协同方式在多个 CPU 间运行,这使系统减少了资源密集型 SQL 操作的运行时间。并行执行选项使多个服务器进程可以并行执行一定的操作。进程,称为查询协调器,将一条语句的执行调配到多个服务器执行,协同所有服务器的结果,并将结果返回给用户。图 1-4 并行查询技术1.4.1.2.1 并行 SQL(parallel SQL execution
26、)技术Oracle 数据库是一个由不同的进程维护的物理数据文件的集合。这样一套后台进程与共享内存段,统称为 Oracle 实例,使并发用户可以与数据库交互。当一个用户需要使用(select 、insert 、update 或 delete )数据库中的数据时,他需要连接到数据库。在大多数 UNIX 系统中,Oracle 使用两任务体系结构。在这个模式中,当一个用户连接到数据库时,派生一个附加的进程,通常称为影子进程、前台等等。影子进程代表用户存取共享内存段与数据文件。在 VLDB 环境中,用户通常需要处理大量数据,影子进程完成必需的工作需要花费一段时间。由于影子进程操纵数据工作时间很长,很辛苦
27、,系统很可能有空闲的 C P U 与内存资源。这正是 Oracle 并行查询选项发挥作用的地方。通过使用这个选项,Oracle 可以将一个用户的大量数据处理请求分解为多个、相对较小的工作单元,这些工作单元可以由不同的进程并发执行。它使用一套专有后台进程,称为并行查询伺服(服务器) ,完成这项工作。影子进程被提升为管理的角色,并称为查询协调器,查询协调器的职责如下:1)将功能分解为并行的小片。2)确保可以得到足够数量的并行查询伺服器。3)为给定的工作初始化伺服器进程,并在 P Q O 服务器的进程之间分派工作。4)从伺服器进程收集输出并将输出返回。5)当完成预期的工作后,查询伺服器进程被释放,并
28、可由其他的工作获得。在最有利的情况下,并行执行减少了执行时间,执行时间的因子是使用的查询伺服器的个数。然而,由 S Q L 语句消耗的总时间并没有减少。并行执行比顺序执行使用更多的系统资源,这样可使的系统的资源得到有效的利用,而不是浪费。O r a c l e 服务器概念手册指出 Oracle 可以并行执行以下的操作: 表扫描; 嵌套循环连结; 排序合并连结; 哈西连结; “Not in ”; Group by ; Select distinct; Union 与 union all; 集合; 从 SQL 调用的 PL / SQL 函数; Order by; Create table as s
29、elect; Create index; Rebuild index; Move partition; Split partition; Update; Delete; Insert . . . select; Enable 约束(表扫描是并行化的) ; 星形变换。1.4.1.2.2 并行数据装载(parallel load)技术在 VLDB 中快速的数据装载速度显得非常重要,ORACLE 的 SQL * LOADER 工具可以并行执行,从而可提高数据装载的速度。Oracle 的并行装载有以下特点: 每个 SQL * Loader 会话分派了一个新的区间并将数据载入新区间中,为优化系统的 I
30、/ O 性能,强烈建议在 OPTIONS 子句中使用 FILE 与STORAGE 关键字控制新区间的位置与大小。FILE 关键字可以在命令行或控制文件中定义,然而,存储子句只能在控制文件中定义。 并行加载要求没有本地或全局索引。如果存在任何索引,会产生一个错误信息并退出加载操作。在加载之前需要手工删除索引,在加载完成后,再重建索引。 每个加载会话需要一个表上的共享锁。 每个加载会话都是独立的,在加载会话之间没有任何联系。 当一个会话完成加载后,Oracle 将加载的区间与已有的区间连接到一起,上次加载区间中没有使用的块作为空区间返回,这导致加载之后非标准大小的区间。即使通过加载控制文件中的存储
31、子句选项指定了区间大小,截断也会发生。1.4.1.2.3 并行恢复(parallel recovery)技术在 VLDB 中中当数据库出现意外损坏而需要恢复时,ORACLE 提供了并行恢复的机制使系统的恢复进间尽量缩短。Oracle 的基本读- 写单位是数据块。每当对块进行修改时,Oracle 将这些改变以重做日志的形式记录下来,如果需要时,可以使用这些日志重建这些块。如果由于介质失效或任何其他的原因而造成当前数据文件的内容丢失,那么这些文件可以从适当的备份拷贝中重建,然后进行恢复。恢复过程包括以下步骤:1 )读日志文件并获得数据块的修改序列号。2 )决定哪一个数据块需要改变。3 )在高速缓存
32、中读这些数据块。4 )从重做日志中将相应的改变应用到这些数据块。5 )将修改完成的数据块写回硬盘。为在并行状态下进行恢复,需要设置初始化参数 RECOVERY_PARALLELISM 。也可以使用 RECOVER 命令的 PARALLEL 子句代替。在并行恢复过程中,服务器管理器或 SQLDBA 会话读重做日志文件并将改变传递给并行服务器进程。然后这些进程读相应的数据文件并应用改变。1.4.1.2.4 并行传播(parallel propagate)技术复制使你可以维护多个数据库中的一个或多个数据库对象映象。ORACLE 服务器在这些数据库之间通过数据库链传送数据,以传播对复制对象的改变。S
33、N P 后台进程执行数据复制。然而,如果要复制的数据卷非常大,同步这个对象会花费很长时间。ORACLE 8 使用并行复制,其中可以使用多个并行服务器进程传播事务。1.4.1.3实体化视图(materialized view)技术实体化视图的基本技术与创建和维护快照的技术类似。实体化视图是一个存储派生数据的表。创建它时,指定用来提供实体化视图的 SQL 。对于 VLDB,实体化视图可以提供一些性能优势。根据基本 SQL 的复杂性,可以提供具有增量变化的实体化视图(通过一个实体化视图日志)而不是在数据刷新期间重建它。与快照不同,实体化视图可以被优化程序用来动态改变查询的执行路径。即使实体化视图在查
34、询中没有被命名,这种称作查询重写的特性也可以使优化程序使用实体化视图来代替被实体化视图查询的表。例如,如果你有一个大型 SALES 表,就可以创建一个按区域汇总 SALES 数据的实体化视图。如果用户为获得一个区域的汇总 SALES 数据查询 SALAS 表,Oracle 就可以使这个查询使用实体化视图来取代 SALES 表。这样就可以减少对一些最大表的访问量,从而改进系统性能。若要启动查询重写的实体化视图,实体化视图的全部主表都必须处于实体化视图的模式,并且你必须有 QUERY REWRITE 系统权限。如果视图和表处于不同的模式,就必须有 GLOBAL QUERYREWRITE 系统权限。
35、通常,应按与其所基于的表相同的模式创建实体化视图,否则就必须管理创建和维护实体化视图所需要的权限与授权。与快照一样,实体化视图创建一个存储数据的局部表和访问该数据的视图。根据实体化视图的复杂性,Oracle 也可能在实体化视图的局部表上创建一个索引。可以搜索实体化视图的局部表来改进针对实体化视图的查询的性能。1.4.1.4位图索引(bitmap index)技术通常,索引创建在选择性很高的那些列上,即,在这些列上的行很少有相同的值。对于一个索引来说,其值只有“Y ”或“ N ”的列是非常糟糕的,因为该索引只含有两个值,所以通过这个列的任何访问都将返回表的一半记录。不过,如果这些索引列中的值属于
36、一个完全静态的数值组,就应该考虑使用位映射索引。例如,如果在非常大的表 EMPLOYEE 中只有很少几个不同的 State_Code 值,即使在 where 子句中经常使用这个列,通常也不在 State_Code 上创建一个B*tree 索引。然而, State_Code 列可以利用位映射索引。位图索引在内部将列的不同值映像到每个记录上。在这个例子中,假设在一个非常大的 EMPLOYEE 表中只有两个 State_Code 值(NH 和 DE)。由于只有两个State_Code 值,所以 State_Code 位映射索引只有两个不同的位映射条目,如果表中前 5 行的 State_Code 值为
37、“DE” ,后面 5 行的 State_Code 值为“NH” ,那么 State_Code 位映射条目就如下面所示:State_codebitmapDe:NH:在上面的程序清单中,每一个数字代表 EMPLOYEE 表中的一个行。由于这里只考虑 10 行,所以只有 10 个位映射值示出来。通过读取 State_Code 的位映射,前 5 个记录的值为“DE ”(用 1 表示) ,后 5 个记录的值则不为“DE”(用 0表示)。对这个列可能有更多的值。在这种情况下,对应每一个值都将有一个独立的位映射条目。Oracle 优化程序能够在查询进程中动态地将位映射索引内容转换为RowID。这种转换能力使
38、优化程序可以使用那些有许多不同值的列上的索引(通过 B*tree 索引 )和那些有很少不同值的列上的索引 (通过位映射索引)。在创建位映射索引时,Oracle 将存储的位映射进行压缩。其结果是位映射索引需要的空间只是正常索引所占空间的 510。因此,对于频繁出现在where 子句中的任何非选择性列(假定该列的不同值数量有限制),应考虑使用位映射索引。如果不断地向列的值清单中添加新值,就必须经常调整位图。在一个 VLDB 中,位映射索引使用在事务表及聚集表的列上时将产生最大的效果。代码表采用完全索引是较好的选择;较大的表能够从位映射索引中受益。对于同一个表,可以既创建位映射索引又创建常规(B*t
39、ree)索引。Oracle 在查询进程中将对所需的索引进行动态转换。1.4.1.5海量数据 VLDB 的管理在 VLDB 中如何管理庞大的数据是一个至关重要的问题,它既影响到数据的安全性也涉及到数据库的性能,oracle 在采用如下手段进行管理。1.4.1.5.1 数据移动技术Oracle 采用了大量改进数据移动操作性能的特征。如本章前面几节所述,这些数据移动特征包括: 供批量删除用的 truncate 命令。 供插入用的 APPEND 提示和 SQL*LoaderDirectPath 装载。 用于将表和索引分成更小数据集的分区。 nologging 操作。在 Oracle8i 及后续版本中,
40、可以使用另一个新特征可迁移表空间来改善数据移动操作的性能。可迁移表空间应改善数据库之间大量移动数据的操作性能。可以移动数据和索引,但不能移动位映射索引或含有收集程序的表(嵌套表和可变数组)。若要移动表空间,必须生成一个表空间集,将这个表空间集移动到新数据库,并把它插入新数据库。下节,将介绍要执行的步骤及实现提示。数据库应在同一个操作系统上,具有相同版本的 Oracle、数据库块大小和字符集。1.4.1.5.2 数据备份从 Oracle8 开始引入的恢复管理器(RMAN )很有可能开创了一个全新的方法用于执行 VLDB 数据库的备份。它提供了从命令行与 GUI 用户界面执行的所有热备份和冷备份功能。恢复管理器同磁盘和磁带备份介质一同工作并提供了如下优于传统的基于操作系统的物理备份方法的特点: 热备份不会导致与传统的 BEGIN/END 备份方法有关的重做日志产生率。 作为备份过程的一个集成部分,检查数据库块是否残缺不全。这可以减少对整个数据库频繁使用 ANALYZETABLEVALIDATESTRUCTURE 语句的要求。 支持增量物理备份。 支持多线程备份(仅限企业版) 。 恢复管理器提供一个集成的分类系统,该分类系统在鉴别所需的备份