金融管理软件中大型数据库性能优化策略研究

2010-06-13 02:10施元超
科技传播 2010年15期
关键词:语句分区数据库

施元超

同济大学软件学院,上海 201804

金融管理软件中大型数据库性能优化策略研究

施元超

同济大学软件学院,上海 201804

为了提高金融领域中大型数据库应用系统的性能和效率,缩短大批量数据的处理时间,本文深入研究了提高数据库系统性能的策略。首先,分析了数据库分区操作技巧;其次介绍了影响SQL语句性能的因素;然后结合实例说明了利用索引的SQL优化技巧;最后总结了SQL性能优化的意义。

大批量数据;分区;索引;SQL优化

0 引言

根据研究显示,金融领域软件系统的数据库都存储着数以亿计的记录,因此,数据库应用系统性能问题尤为突出。当用户每次操作的数据量在几十万记录时,全表扫描一次往往需要数10min,但可能只需返回几条记录。此时,怎样减少数据吞吐,对数据库性能优化就成为关键。

1 从分区开始

在大量数据处理的项目中,可使用分区表来提高系统的性能并方便数据管理。金融领域的数据库应用中,要处理的数据量通常可达到GB级。为了使数据在读写操作和查询更快,数据库提供了对表和索引的分区技术。

分区的优点:增强可用性、维护方便、均衡I/O、改善查询性能。因oracle在金融领域的广泛应用,本文以oracle举例。

Oracle提供的分区方法有:范围分区、散列分区和复合分区。

金融管理软件中业务数据多以日期或交易序号组织,所以可采用范围分区。通常根据交易序号或业务日期范围分区,有时也采用复合分区,例如先根据日期再根据交易编号分区。

注意,在进行分区表操作时,最好指定分区,因为指定了分区,系统执行时只操作该分区的记录,提高了处理的速度。

2 在SQL优化中前行

SQL操作大约消耗70%~90%的资源,它独立于程序设计逻辑,改进SQL是最好、最安全的提高性能的途径,SQL的优化时间和风险成本都很低。

2.1 影响SQL性能的因素

影响SQL性能的因素很多,有几个主要原因:书写不规范,它会导致SQL语句不必要的重复解析;未充分利用数据库的功能,如查询的并行化处理;过多的I/O操作,如未不恰当使用索引导致全表扫描;高频处理垃圾记录,如多表连接时过滤条件位置不当导致中间结果集包含太多的垃圾记录。

2.2 SQL优化之利用索引优化

过多的I/O操作会占用CPU、消耗大量内存,而优化I/O最好的办法是用索引扫描代替全表扫描。

1)建立索引的原则:(1)在主键、频繁被访问的列和经常被连接(非外键)列上建聚簇索引,当所有值唯一时,定义唯一索引;(2)有大量重复值,经常有范围查询、排序、分组的列建立聚簇索引;经常同时存取多列,且每列都有重复值建复合索引来覆盖查询,把引用最频繁的列作为前导列;并尽量使关键查询形成覆盖查询;(3)条件表达式中经常用到的不同值多的列建索引。

2)避免不合理使用索引

通过建立索引,一般都会加快查询速度;但当oracle优化器在执行时不当使用索引时,会得到反效果。例如:

假设:当每个表有几万条记录,两表都未建索引,2s就可查出结果。而当在A表中建立复合索引(复合索引里包含 tradedate字段)数据库会用索引,这时查询要几分钟。所以索引使用不当会严重影响语句性能。下面给出几个优化方法:

1)直接去掉索引,这不是好方法,别的查询可能需要这个索引。

2)改写where语句: WHERE TRIM(A.TRADEDATE) =b.TRADEDATE两三秒即出结果。因为oracle默认有函数的字段不用索引,查询语句忽略索引,仍全表扫描。

3)在B表里建index(tradedate,account),改为执行时间为半秒。因为Oracle默认使用前表索引,例中只会使用B表的有效索引。

3)应用基于函数的索引

基于函数的索引(FBI)提供了索引计算列,并在查询中使用这些索引的能力。FBI的实质是对查询所需中间结果进行预处理。如果一个FBI与查询语句中的内嵌函数完全匹配,CBO在生成查询计划时,将自动启用索引范围扫描替换全表扫描。函数越复杂,基于该函数创建FBI对SQL查询优化作用越明显。

4)强制使用索引,利用oracle的并行功能

Oracle对全索引扫描有如下限制:SQL请求的全部列必须驻留在索引树中;即SELECT和WHERE子句中的所有数据列必须存在于索引中。Oracle提供了SQL提示强制全索引扫描。可指定index_ffs提示强制快速索引扫描,这常与parallel_index提示组合。下面查询强迫使用并行快速全索引扫描提高效率,

3 结论

查询优化是取得良好执行性能并简化管理的关键因素,而对于交易数据成百万计的金融软件尤为重要。优化SQL,关键是索引,怎样合理利用索引是一个复杂深刻的问题。本文其进行简单总结,希望对开发人员帮助查询优化器获得更好的执行计划有所帮助,这些执行计划是查询优化器无法靠自身独立工作产生的。

[1]王振辉,等.基于关系数据库的SQL查询语句执行过程效率分析与对策.计算机时代,2008.

[2]豢葵.SOL语句的查询优化分析.华南金融电脑2004.

[3]Beth Van Hom,Mark KorrS.优化SOL查询语句的经验.Oracle应用开度论文集,1992.

[4]徐立溥.浅谈ORACLE数据库的优化及提升.硅谷,2009.

[5]韩中华,等.动态SQL在企业综合管理系统中的实现.自动化与仪表,2008.

TP31

A

1674-6708(2010)24-0206-02

猜你喜欢
语句分区数据库
上海实施“分区封控”
重点:语句衔接
浪莎 分区而治
数据库
数据库
数据库
数据库
基于SAGA聚类分析的无功电压控制分区
基于多种群遗传改进FCM的无功/电压控制分区
如何搞定语句衔接题