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