李晓英
(大庆油田天然气分公司 工程技术大队,黑龙江 大庆 163416)
随着网络模式系统应用的不断深入,用户访问量、数据量越来越大,数据库规模也随之不断扩大,数据库系统的性能、编程效率和系统运行效率等问题就越来越突出,因此,除系统架构设计合理外,如何对数据库和程序代码进行调优是系统高效运行的关键。
目前油田大系统开发中基本都采用了Oracle作为数据库服务器。Oracle数据库服务器是高度可优化的软件产品,经常性的调整可以优化应用系统性能,防止出现系统瓶颈。数据库性能优化的基本原则就是:通过尽可能少的磁盘访问获得所需的数据。对Oracle数据库进行性能调整时,应按照一定的顺序进行,这样避免系统开发后期或完成后,出现一些不必要的或者代价很大的调整。系统开发前期要充分对系统进行详细的优化设计,从如下3个阶段入手。
为了充分利用Oracle数据库的功能特性,设计系统时,根据业务情况(访问量或客户端数量)和现有资源状况(服务器配置)考虑系统架构和数据库逻辑结构的设计,对其逻辑结构和物理结构进行优化设计,使之在满足需求条件的情况下,系统性能达到最佳,系统开销达到最小。
采取操作系统级、数据库级的一些优化措施来使系统性能最佳。
1.1.1 调整硬盘 I/O
在应用系统开发之前,DBA可将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。在磁盘比较富裕(空间换时间)的情况下还应遵循以下原则:用户表空间与系统表空间分开磁盘存放;创建表和索引时指定不同的表空间;创建回滚段专用的表空间,防止空间竞争影响事务的完成;创建临时表空间用于排序操作,尽可能防止数据库碎片存在于多个表空间中。
1.1.2 确定数据块大小和存储参数
由于数据库块的大小在数据库创建以后就不能再修改,因此为了减少数据链接和行迁移,又提高磁盘空间的利用率,在设计数据库时要确定合适的数据块大小和存储参数。通常我们是根据样例数据确定数据块大小,而根据业务现状和未来发展趋势确定存储参数。
1.1.3 恰当使用分区、索引及存档功能
业务数据量随着应用时间不断增长,考虑存放该数据库表使用Oracle数据库的分区功能;对于经常访问的数据库表建立索引;对于经常访问但是当业务流程完成后不再变动的数据,采用放入历史档案的方法来实现应用系统中访问尽可能少的数据量。
程序优化是指对解决同一问题的几个不同的程序,进行比较、修改、调整程序,把一般程序变换为语句最少、占用内存量少、处理速度最快、外部设备分时使用效率最高的最优程序。
良好的SQL语句可以被数据库重复使用而减少分析时间;恰当地使用索引可使访问数据块大大减少,从而减少响应时间。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率决定了系统运行的性能。
2.1.1 减少访问数据库次数
当执行每条SQL语句时,O racle内部执行了许多工作,相当费时,因此单条语句执行,变多条语句组合一起执行,能够达到效率与易用的最佳结合,减少网络传输次数,可节省很多系统运行时间,如下语句:+
循环S QL数组,每次循环都产生一条SQL语句,若在循环体内依次执行,增加了数据库的连接和关闭次数,严重降低系统运行效率,若采用将数组保存在SQL语句,一起执行,只需一次数据库的连接就可以执行多条SQL语句。
2.1.2 select子句中避免使用“*”
O racle在解析过程中会将“*”依次转换成所有列名,这将意味着耗费更多的时间,因此,在使用select语句时,最好写全列名。
但有一点特殊,计算记录条数语句 Count(*)却比 count(1)稍快,如果可以通过索引列检索,对索引列的计数仍是最快的。
一次性取出数据存于虚拟表中供程序处理,利用内存的高速性,达到提高程序处理速度的目的。反之,把处理的数据先存于虚拟表中,处理好后再一次性存入实表中,也可达到同样目的。
减少循环和嵌套语句结构,循环和嵌套层数越多,运算速度越慢(相对重复执行的语句多),减少循环和嵌套层数,或不用循环嵌套语句,就可提高程序执行速度。
有时为了提高数据处理、查询速度,可适当增加一些中间表、一些多余的数据项,以达到提高系统效率的目的。
如:(1)把计算项、合计项存入表中,来提高查询速度。
(2)建立辅助表,描述单表间关系,方便编程,提高程序运行效率。
如天然气装置运行成本对标系统中成本核算统计表中的HJL(合计量)、HJZQ(合计周期)字段,就是为提高数据汇总查询及读取速度而增加的数据项。
设计录入功能时,把很多数据检验放到客户端,对于每个用户而言,其计算机只承担自身的工作,若将大量的数据检验都放到服务器端,其要承担很大的压力,占用很多服务器和网络资源。所以客户端与服务器大量交互式的最佳优化模式就是客户端校验的效率与易用的最佳结合,以及尽量减少数据的网络传输。
配置性能高配的服务器,为系统提供高质量硬件平台;配置智能三层交换机,保证网络高效、稳定运行。
随着计算机软硬技术的迅猛发展,系统开发的软硬环境也越来越复杂,如今系统开发模式已发展成了多用户的网络模式,在网络模式下的多用户系统开发过程中,编程技巧的使用不仅是高效系统开发的基础,更是系统高效运行的保障。