首页 > 范文大全 > 正文

金融企业中的oracle数据库性能优化方案分析

开篇:润墨网以专业的文秘视角,为您筛选了一篇金融企业中的oracle数据库性能优化方案分析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要 本文分析了金融企业中应用的oracle数据库的性能特点,对其性能的评价指标进行了简要介绍,重点阐述和研究了如何根据oracle数据库运行机制对其进行性能优化。

关键词 金融企业;oracle数据库;性能;优化

中图分类号:TP311 文献标识码:A 文章编号:1671—7597(2013)041-032-02

金融企业在运营过程中会产生大量的数据信息,应用这些信息金融企业可以获得所需的分析结果或者对历史记录进行查看。但是如此庞大的信息如何进行存储和应用是非常困难的。应用数据库软件可以实现对数据的管理。以oracle数据库为例,对全表进行一次扫描往往需要花费数十分钟,但是需要返回的数据记录可能只有几条,如何减少数据的吞吐、降低用户等待时间、提升检索命中率,就成为金融企业对数据库进行性能优化的主要目的。

1 oracle数据库的特点

Oracle数据库具有以下特点。

1)能够实现多用户、大数据的数据处理需求。其单点更新、多点查询功能在尽量保证数据争用最小的条件下允许多个用户同时对同一数据进行访问和应用。

2)对多种类型的硬件环境的支持性好。

3)数据安全性和系统可控性叫号,可以有效保证数据在被访问期间的完整性和安全性。

4)运行环境的兼容度高,可支持多个操作系统环境下的数据通信。

5)采用规范的通信协议工业标准,数据的兼容度较好。

2 数据库性能的评价标准

可以从以下几个标准对数据库性能进行评价:

单位时间内数据库软件可以完成的SQL语句数量叫做系统吞吐量,该指标主要用于衡量相同资源环境下软件的工作效率。

响应时间是指从用户向系统提交SQL语句后到获得返回结果所需的时间。显然的,响应时间越短用户体验越好。缩短响应时间可以从两方面着手:一方面是提高数据库的吞吐量,另一方面是降低同一数据库资源的冲突率。

数据检索命中率主要是对用户请求数据能否在内存中获得设定的一个衡量标准。由于高速缓存的读取开销要小于磁盘,若想有效改善数据库使用性能可以通过提升数据检索命中率的方法来实现。

内存使用情况是指能否合理分配共享内存、永久内存和运行内存,使得延时、争用和等待最小。

磁盘I/O操作是计算机系统中的最大开销方面,如果能够减少不必要的I/O开销可以有效提升系统给的吞吐量,降低用户的等待时间。

3 oracle数据库性能优化

3.1 SQL语句的优化

该优化技术的原理是充分利用索引来降低对I/O存储表的搜索,应用优化器将性能较差的SQL语句转换为性能较好的SQL语句,简化搜索路径,平衡I/O时间和处理时间。对SQL语句的优化可以通过以下方法实现。

3.1.1 共享语句

由于每条SQL语句在执行前都需要解析,且该操作占用较多系统资源,影响系统性能。因此,在oracle完成第一次解析后,把得到的执行计划和SQL语句存储在内存中,并把内存中的这些数据称作共享池,所有的数据库用户都能共享池中数据。当执行新的SQL语句时,先对共享池中数据进行遍历,如果存在相同的执行计划和语句,则oracle就不必再进行解析,直接从共享池中获得该语句的执行路径。因此,共享语句可以明显提高语句的执行性能。

为了最大限度的发挥共享池的作用,需要在编写SQL语句时尽量使用绑定变量的方式,达到提高SQL语句的匹配概率的目的。同时,绑定变量使得oracle进行一次硬分析后永远都是软分析,跳过硬分析的耗时步骤,提高系统的可伸缩性并且避免遭SQL注入的风险。

3.1.2 访问路径优化

访问路径是SQL语句经过解析后产生的若干存储方式。通过访问路径可以定位和查询所需要的数据。

在物理层,oracle每次以数据库块(多个连续的操作系统块)作为最小单位对数据进行读取操作,每次读取操作的最大值由初始化参数multiblock参数和操作系统一次I/O的最大值来共同决定。在逻辑层中,oracle的访问路径包括全表扫描、rowid存取、索引扫描3种方式。其中,进行全表扫描时oracle需要访问表中的所有行,若想在一次I/O读取多个数据库块可以采用多块读取操作,就能够对全表进行高效扫描,进而提高系统吞吐量;rowid存取的访问路径能够精确定位到数据所在的数据块中的位置,该方法一次I/O只能读取一个数据块,是oracle存取单行数据最快的方法;索引扫描的效率处于全表扫描和rowid存取之间,先通过索引获得数据的rowid,然后再通过rowid快速定位数据,索引扫描包括索引范围扫描、索引全扫描、索引唯一扫描和索引快速扫描等。当所取出的数据量超过总量的10%或进行并行查询时,推荐使用全表扫描,当所取出的数据量在总量的10%一下时,推荐使用索引扫描来提高访问效率。

3.1.3 表连接优化

在进行数据修改或数据库查询等操作时,需要通过表连接从多个表或视图中取出数据,常用的表连接方式有合并连接、嵌套循环和哈希连接等。

合并连接是对经过排序后的数据集进行操作,而对非排序的数据集进行排序会消耗较多资源,因此合并连接并不适用;嵌套循环的连接过程包括两层嵌套循环,为了提高连接效率,可以将外层循环的次数设置的较小,并且把数据量较少的表选为驱动表;哈希连接是先通过驱动表创建哈希表,再把驱动表的哈希结果和哈希表连接起来。由于所创建的哈希表完全包含于内存之中,因此是理论上效率最高的表连接方法。

3.1.4 执行计划的人工干预

基于代价的优化器一般情况下总是选择效率较高的执行计划对待执行语句进行处理,因此可以采用人工干预的方式提高语句执行效率,为语句添加提示(hints)可以命令优化器按照指定的链接类型或存取路径生成执行计划。

hints能够改变当前使用的表访问路径、优化器类型和链接方法,使oracle可以按照人为设定的方式执行SQL语句,从而达到提高执行效率的目的。常用的改变优化器类型的hints有All-rows、First-rows等;改变访问路径的hints有Full、Index、Index-FFS等;改变表连接方法的hints有Use-NL、Use-Merge、Use-Hash等。通常需要运用不同的hints和hints组合达到高效运行SQL语句的目的。

3.1.5 更改对象定义

在编写SQL语句时通常涉及到表、视图、定义词等对象,生成的执行计划和引用对象(基表)相联系。例如当把视图作为对象时,是一个一对一的基表查询语句或一对多的基表查询语句,如果试图引用的表出现了索引或连接方面的问题将导致视图的查询执行效率很低。为此,可以更改视图定义,提升视图的执行效率,从而也就提升了整个系统的查询效率。

3.2 内存优化

oracle数据库中的内存结构比较复杂,内存设置的不合理会造成程序处理效率的降低,并造成数据库响应时间的增加,因此必须优化数据的内存。oracle内存包括系统全局(SGA)和程序全局(PGA),包含多个部分,对不同部分进行优化可以获得较好的性能提升。

3.2.1 数据库的系统全局优化

可以通过调整SGA内存结构的大小实现oracle数据库内存优化。在优化过程中要重点对高速缓存区和共享池进行优化,其目标是实现快速的存取内存数据。可以根据数据库存储需求并通过监视数据库运行状态来调整SGA的大小,修改每个节点SGA的大小的语句是:

SQL>alter system set sga_target = 300m scope = both sid = ‘***’

另外,oracle数据库提高了SGA的动态特性,在SGA中增加了相应的动态参数,因此每个活动区域都能够对其进行单独的监督与控制。

3.2.2 共享池性能优化

在共享池优化方面应该综合考虑SQL语句的连续性和存储空间的整体性,尽量避免出现语句离散和空间碎片等情况出现,这样可以提升数据库系统的响应速度。

若想对每个节点共享池的大小进行调整可以通过调整SHARED POOLSIZE的值来实现;在设置共享池时注意代码的重用可以提高其命中率;对于诸如自定义的过程与包等比较大的对象,可以在内存中预先储存比较重要的大对象,也能够达到提高共享池性能的目的。

总之,应该保证共享池对语句的解析和运行效率以及数据的命中率,确保库缓冲区同高速字典数据缓冲区的大小合适。

3.2.3 高速缓冲区性能优化

高速缓冲区的大小与磁盘I/O密切相关,通常来说,高速缓冲区的缓存越小,数据库能够存放的内存数据也就越少,相比之下磁盘的I/O也会变大。为了减小磁盘的I/O消耗,可以通过调整高速缓冲区的尺寸来实现,使服务器进程能够尽可能在缓冲区中找到所需数据,从而缩短等待数据块或空闲缓冲区的时间。若想增大Buffer Cache可以通过调整DB_ACHE_SIZE的值来实现;同时使用多个缓冲池,将倾向于一直保存的数据放到Keep池中,将倾向于即时老化的数据放到Recycle池中,将未指定存储池的数据放到Default池中,从而提高Buffer Cache的命中率。

对于库缓冲区的优化,可以通过Select (1-sum(reloads/sum(pins)) from v$librarycache查询指令查询命中率,若查询得到命中率低于预期目标可以通过增大SHARED_POOL SIZE的方式进行性能提升。

在数据字典高速缓存优化方面,同样可以使用类似上述selcet查询指令进行查询,不同的是对该参数的优化可以通过增大共享池来实现。

在系统日志缓冲区优化中,应该根据实际访问需求设置适当的存储空间,查询日志缓冲区value值,若不接近零则上调LOG_BUFFERS,直到该返回值接近零为止。

3.2.4 程序全局优化

oracle对事物进行处理后会产生一定数量的递归语句,因此在进行SQL语句的语法分析时,减少不必要的语法分析也可以提高事物的处理速度的目的。因此为PGA分配合适空间处理SQL语句的工作空间,可以避免重复的语法分析。

3.3 表空间的优化

高效合理的使用表空间同样可以提高数据库系统的性能。

1)分离索引和数据;分离归档日志和重演日志;分离系统表空间、temp表空间和Tools表空间,对于I/O操作频繁的表空间如系统表空间等进行存储磁盘分离。

2)避免在系统表空间中存储非系统用户的对象,临时表空间尽量被用于存储需要进行巨型排序的数据信息。

3.4 磁盘I/O优化

磁盘是数据库中的物理存储媒介,磁盘的I/O操作是数据库性能的重要体现之一,也是系统消耗最大的操作。因此,对磁盘I/O的监控与控制非常重要,可以克服数据库系统的性能瓶颈问题。影响磁盘I/O性能的主要因素有磁盘竞争、I/O次数过多和数据块空间分配管理等。因此可以从以下几方面对磁盘I/O进行优化:

1)在独立的磁盘上存储访问量较大的数据文件,尽可能在不同的磁盘上存储同一个表空间的不同数据文件。这种方法可以降低经常使用的对象对I/O的争用机会。

2)对内存中的数据进行修改时,需要先将修改数据写入重做的日志文件。另外,重做的日志文件应该保证具有足够空间,并且与数据文件分开储存在不同的磁盘上,将重做日志文件分组,写满后切换到下一组,按顺序循环写入,从而减少磁盘竞争。

3)oracle中的文件和操作系统的其他文件尽量放在不同的磁盘上。

4)使用廉价磁盘冗余阵列(raid)。这种方法能够自动分辨不同类型和访问频率的数据库文件,减小I/O进程之间的竞争。

5)创建回滚段和专用的空间表,防止空间竞争,提升事物完成效率。

6)对用户数据表空间进行独立的创建,同时在不同的磁盘存储用户数据表空间和系统表空间(system);利用临时表空间进行排序操作,同时尽量避免数据库碎片散布在多个表空间内。

4 总结

Oracle数据库系统对于金融企业而言,具有非常重要的意义,应用本文优化方案可以较好的提升数据库的吞吐量,降低系统的响应时间。由于oracle数据库系统构成非常复杂,对其进行性能优化需要进行多方面工作,实际应用中,应该综合对数据库所处操作环境的性能、数据关联使用的网络的性能等多方面因素进行考虑制定合理有效的优化措施,同时数据库的调整优化是一个反复的过程,需要由管理员经常调试,并在实践中不断积累经验,理论与实践相结合,从而使数据库系统获得最优性能。

参考文献

[1]魏亚楠,宋义秋.oracle数据库应用系统的性能优化[J].制造业自动化,2010,32(8).

[2]蒋凤珍.Oracle数据库性能优化技术[J].计算机工程,2004,30(z1).

[3]杨厚云,龚汉明,武装.Oracle数据库性能优化方案[J].北京机械工业学院学报(综合版),2006,21(4).

[4]施元超.金融管理软件中大型数据库性能优化策略研究[J].科技传播,2010(15).

[5]王玉玮,王兰.浅析Oracle数据库性能优化的方法[J].科技创新与应用,2012(21).

[6]侯春放.对Oracle数据库性能优化策略探析[J].计算机光盘软件与应用,2012(8).