《Oracle数据库性能优化技术在邮政系统中的应用》由会员分享,可在线阅读,更多相关《Oracle数据库性能优化技术在邮政系统中的应用(5页珍藏版)》请在金锄头文库上搜索。
1、Oracle 数据库性能优化技术在邮政系统中的应用摘要: Oracle 数据库在邮政行业应用越来越广泛,而其性能优化直接关系 到邮政应用系统的运行效率。 本文以数据库性能优化的基本原则为出发点, 阐述 了在数据库设计阶段如何避免竞争和如何优化数据访问, 在数据库运行阶段如何 从操作系统和数据库实例级别上调整内存和 I/O 来达到数据库性能优化的各种 技术。关键词: Oracle 数据库,邮政应用系统,性能优化1、引言随着邮政应用系统网点的访问量越来越大,采用 Oracle 数据库(一种 支持 SQL 语 言的数据库 )的应用系统也随之不断增多,数据库系统的性能问题就越来 越突出。采用什么样的
2、Oracle 数据库优化技术能够更好地保证邮政应用系统平 稳运行显得越来越重要。数据库性能优化的基本原则就是: 通过尽可能少的磁盘访问获得所需要的数 据。要评价数据库的性能, 需要在数据库调节前后比较其评价指标: 响应时间和 吞吐量之间的权衡、 数据库的可用性、 数据库的命中率以及内存的使用效率, 以 此来衡量调节措施的效果和指导调整的方向。对 Oracle 数据库进行性能调整时,应当按照一定的顺序进行,因为系统在 前面步骤中进行的调整可以避免后面的一些不必要调整或者代价很大的调整。一般来说可以从两个阶段入手: 设计阶段: 对数据库逻辑结构和物理结构进行优化设计, 使之在满足需求 的情况下,系
3、统性能达到最佳,系统开销达到最小: 数据库运行阶段: 采取操作系统级、 数据库级的一些优化措施来使系统性 能达到最佳。2、在系统设计开发阶段调整数据库为了充分利用 Oracle 数据库的功能特性,在设计应用系统时,数据库设计 人员需要根据业务情况 ( 如访问量或客户端数量 ) 和现有资源状况 ( 如数据库服务 器的配置 ) 考虑系统结构和数据库的逻辑结构设计。2.1 调整数据库结构设计。 不同的数据库结构设计会使应用系统性能有很大不同, 合理有效的数据库结 构可以大大提高应用系统性能。 比如对于邮政代理保险信息管理系统, 是一个基 于B/S (即:Browser/Server结构意为浏览器和服
4、务器结构)。结构的 We( Web是 一种体系结构,通过它可以访问遍布于 Internet 主机上的链接文档。 )应用,经营分析和 统计功能要求数据资源很大, 针对这一情况可以在数据库设计时使用临时表, 加 快统计分析的速度。2.2 恰当使用分区、索引及存档功能。如果某种业务的数据量增长非常快, 可以考虑存放该业务的数据库表是否使 用 Oracle 数据库的分区功能:对于经常访问的数据库表是否需要建立索引:对 于经常访问但是当业务流程完成后不再变动的数据可采用放入历史档案的方法 来实现应用系统中访问尽可能少的数据量。 报刊发行系统是一个全国大集中的处 理系统, 每年报刊订户卡片的数据量非常可观
5、, 为了加快处理速度, 方便用户查 询,可以采用分区表设计,将订户卡片按年度分区存放。2.3 调整硬盘 I/O 。调整硬盘 I/O (硬盘的输入输出系统)是在应用系统开发之前完成的。数据 库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上, 做到硬盘之间 I/O 负载均衡。在磁盘比较富裕的情况下还应该遵循以下原则: 将表和索引分开: 创造用户表空间, 与系统表空间 (system) 分开磁盘存放: 创建表和索引时指定不 同的表空间: 创建回滚段专用的表空间, 防止空间竞争影响事务的完成: 创建临 时表空间用于排序操作, 尽可能地防止数据库碎片存在于多个表空间中。 电子化 支局系统就是遵循
6、以上原则,实现硬盘之间 I/O 负载均衡。2.4 确定数据块大小和存储参数。由于数据库的块大小在数据库创建以后就不能再修改 ( 除非重建数据库 ),因 此为了减少数据链接和行迁移, 并提高磁盘空间的利用率, 在设计数据库时要确 定合适的数据块大小和存储参数。 通常根据样例数据确定数据块大小, 而根据业 务现状和未来发展趋势确定存储参数。2.5 充分利用系统全局区域。SGA(SharedGlobal Are, 是 Oracle Instance 的基本组成部分,在实例启动 时分配。是一组包含一个 Oracle 实例的数据和控制信息的共享内存结构。 ) 是 Oracle数据库的心脏。正确的SGA大
7、小对数据库的性能至关重要 SGA包括以下 几个部分: 、数据块缓冲区(Database buffer cache) 是SGA中的一块高速缓存,用 来存储从数据库重读取的数据块 (表、索引、簇等 ) ,因此采用 Least Recently Used (LRU,最近最少使用)的方法进行空间管理。 、字典缓冲区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表说明和权限,它也采用 LRU方式管理。 、重做日志缓冲区。保存为数据库恢复过程中用于前滚操作。 、SQL(全名是结构化查询语言 (Structured Query Language,是用于数据 库中的标准数据查询语言)共享池。
8、保存执行计划和运行数据库的 SQL语句的语 法分析树。另外,SGA还包括大池、JAVA池(Java pool是Oracle 8.1.5版本中增 加的,目的是支持在数据库中运行Java)、多缓冲池。但是主要是由上面4种缓 冲区构成。 一个足够大的内存区可以把绝大多数数据存储在内存中, 只有那些不 怎么频繁使用的数据,才从磁盘读取,这样就可以大大提高内存区的命中率。2.6高效地进行SQL语句设计可以采用下面的方法优化 SQL对数据操作的表现:(1)减少对数据库的查询次数,使用快照和显形图等分布式数据库对象可以 减少对数据库的查询次数。(2)尽量使用相同的或非常类似的SQL语句进行查询,这样不仅充分
9、利用SQL 共享池中的已经分析的语法树,要查询的数据在SGA中命中的可能性也会大大增 加。(3)限制动态SQL使用,虽然动态SQL好用,但是即使在SQL共享池中有一 个完全相同的查询值,动态 SQL也会重新进行语法分析。(4)避免不带任何条件的SQL语句的执行。没有任何条件的 SQL语句在执行 时,通常要进行全表扫描, 数据库先定位一个数据块, 然后按顺序依次查找其它 数据,对于大型表这将是一个漫长的过程。(5)如果对有些表中的数据有约束,最好在建表的SQL语句用描述完整性来实现,而不是用SQL程序中实现。(6)可以通过取消自动提交模式,将 SQL语句汇集一组执行后集中提交,程 序还可以通过显
10、式地用 COMM(提交当前事务)和 ROLLBACL回滚事务)进行 提交和回滚该事务。(7)检索大量数据时费时很长,设置行预取数则能改善系统的工作表现,设 置一个最大值,当SQL语句返回行超3、在数据库运行阶段调整数据库数据库运行阶段调整数据库包括两个方面: 操作系统级的调整: 数据库级的 调整。3.1 、操作系统级的调整实施操作系统级调整可以通过减少内存交换来实现。内存交换 (swapping) 可能会造成很大的内存开销,应将它最小化。运行在 SolarisUnix 操作系统上的 Oracle 数据库, 可利用 vmstat 或 sar 命令来检查交 换,查看到系统级内存和硬盘 I/O 的使
11、用情况,调整 Unix 数据缓冲池的大小、 每个进程所能使用的内存大小等参数。若系统内存交换较多,且需要节省内存,可采用以下措施: 避免运行不必要的系统daemon程或应用程序进程: 在不明显影响数据块命中率的前提下减少数据库缓冲区的数量,以释放一些内存: 减少 Unix 文件缓冲区的数量 (特别是在使用裸设备时 ) 。邮政代理开放式 基金系统中为了避免对内存资源的竞争, 有些参数以文件形式存放, 减少使用共 享内存技术,从而避免内存交换的出现。3.2 、数据库级的调整每一个Oracle实例都是由一组Oracle后台进程和SGA的一个内存区组成 的。这组后台进程会自动读写数据库的数据文件, 因
12、此,数据库性能可以被这些 因素所影响:SGA各部分的分配是否合理,使用效率是否正常: I/O和锁竞争 是否较多。SGA中:共享池、数据块缓冲区是 SGA的主要组成部分 共享池 (shared pool) 。共享池存放库缓存(存储共享SQL和PL/SQL区)和数据字典缓存(数据库对象 信息)以及会话期间信息(对于MTS。由于这些信息是应用程序需要经常访问的, 因此这些信息需要保持高的命中率。 数据块缓冲区存放用户所经常访问的数据文件的数据块内容以及用户修 改的数据内容。 数据库把数据文件里的内容读到内存中, 下次需要时直接从内存 中读取,从而减少了磁盘的 I/O 和响应时间。 当然,一般只在比较
13、小的数据表 (如 常用代码表 )才缓存到内存中。由于数据块缓冲区中不可能存放所有的数据,因此可使用LRU算法来确定移 出哪些数据块,但又尽量保证有较高的数据命中率。 I/O和资源竞争。由于有众多的进程要写数据文件, 因此需要通过 I/O 调整来解决 I/O 瓶颈问 题。如果在设计阶段有效地考虑了表空间的合理分配, 就能有效地在一定程度上 减少 I/O 竞争。在数据库运行时, 由于数据的动态增长, 原来分配给表或索引的 空间已经用完, Oracle 会自动分配空间给这些数据库对象。而这个动态分配会 对系统性能有所影响, 所以要求: 避免动态空间管理表空间的本地化管理, 以减 少与数据字典表空间的
14、磁盘竞争。另外,在 Oracle 中,需要采用一些机制来保证数据库对象在使用期间的稳 定性和数据的一致性,如使用锁存器 (latch) 、锁 (lock) 等。因此争用和这些机 制相关的资源会影响数据库的性能。 为了减少这种资源竞争, 可以通过调整数据 库的相关初始化参数 ( 如 db_block_lru_latches 、 dml_locks) 来减少资源的争 用,优化数据库性能。 利用数据后台处理方案减少网络流量(l) 合理创建临时表或视图所谓创建临时表或视图, 是根据需要在数据库基础上创建新表或视图, 对于 多表关联后再查询信息的可建新表, 对于单表查询的可创建视图, 这样可充分利 用数
15、据库的容量大、 可扩充性强等特点, 所有条件的判断、 数值计算统计均可在 数据库服务器后台统一处理后追加到临时表中, 形成数据结果的过程可用数据库 的过程或函数来实现。(2) 数据库打包技术的充分利用 利用数据库描述语言编写数据库的过程或函数, 然后把过程或函数打成包在 数据库后台统一运行包即可。(3) 数据复制、快照、视图,远程过程调用技术的运用数据复制,即将数据 一次复制到本地, 这样以后的查询就使用本地数据, 但是只适合那些变化不大的 数据。使用快照也可以在分布式数据库之间动态复制数据, 定义快照的自动刷新 时间或手工刷新, 以保证数据的引用参照完整性。 调用远程过程也会大大减少因 频繁
16、的SQL语句调用而带来的网络拥挤。多CPU和并行查询方式的利用 尽量利用多个 CPU处理器来执行事务处理和查询 CPU的快速发展使得Oracle砚越来越重视对多CPU的并行技术的应用,一个数据库的访问工作可以 用多个CPU相互配合来完成,加上分布式计算已经相当普遍,只要可能,应该将 数据库服务器和应用程序的CPU青求分开,或将CPU青求从一个服务器移到另一 个服务器。对于多 CPU系统尽量采用Parallel Query Option(PQO,并行查询选项) 方式进行数据库操作。 使用PQOJ式进行数据查询PQOJ式不仅可在多个CPU间分配SQL语句的 青求处理, 当查询的数据处于不同的磁盘时, 一个个独立的进程可以同时进行数 据读取。 使用 SQL*loader Direct