查字典论文网 >> 数据库优化在海量数据下的研究与应用

数据库优化在海量数据下的研究与应用

小编:

摘 要: 基于云计算技术和海量数据的支撑,对数据库进行多方面的调整和优化能够最大程度地提高数据库系统的运行效率,降低系统运行的资源消耗,使得海量数据的响应效率大幅提高。以Oracle数据库为例,分析了影响数据库性能的各方面因素和数据库优化应遵循的方法,就数据库优化技术方法进行了探讨。通过数据库实施该优化方案前后的性能对比,得到数据库在运用此方法进行优化后性能明显提升的结果,这表明该方法有一定的使用价值。

关键词: Oracle; 数据库优化; CPU的优化; SQL语句优化

Research and application of database optimization in the massive data

Cen Wei

(Shanghai Pudong Development Bank, Shanghai 200042, China)

Abstract: Based on cloud computing and mass data, the database is adjusted and optimized. The system operation efficiency has been improved to the maximal extent. The consumption of resource is lowered to increase the response efficiency of large amount data. Taking the Oracle database as an example, various factors which affect the database performance and methods which should be observed for optimization of the database are analyzed. The database optimization methods are discussed. Comparing performances before and after the optimization schemes, it is concluded that the performance is improved significantly, showing that the method has certain use value.

Key words: Oracle; database optimization; CPU optimization; SQL optimization method

0 引言

随着云计算不断广泛和深入的应用,海量数据的处理和快速响应显得特别重要,其中数据库的调整和优化占据着核心的地位。通过对数据库系统性能瓶颈问题的挖掘,依靠数据库性能调整和优化方法,最大程度的提高数据库系统的运行效率,降低系统运行的资源消耗,使得海量数据的响应效率大幅提高。数据库的调整和优化包括多个层次,它包含数据库运行环境的优化、数据库参数优化和应用优化三个层面。Oracle数据库作为一种高可靠性、高兼容性和安全性的大型关系型数据库,能够很好地承载海量数据,有效管理和利用不断产生并急剧膨胀的数据,从而更好的为业务应用作支撑。

本文以Oracle数据库为例,从CPU的优化、磁盘I/O的优化、内存的优化、数据库逻辑结构和物理结构优化、网络环境优化、SQL语句优化的方法与技巧,索引创建的相关规则等,逐一对数据库的调整优化技术进行探讨。

1 数据库物理结构优化

从操作系统级别看,Oracle数据库文件是存储在磁盘上并由文件组成的,因此,其物理结构的优化决定着数据库的效率。在非动态变化周期内,应用系统的数据库不断的增大/缩小,对其影响很小或者说效率合理,但是这样的情况在动态变化的周期内性能会急剧下降,这是由于Oracle动态扩展造成的。在动态扩展过程中,Oracle在创建行、行变化获取缺省值的时候,必须根据存储的要求扩展和分配新的存储空间,而且表格的扩展会进一步导致数据文件、表空间的增长,这些扩展会使得系统反应变慢。为了避免这种情况的发生,采用优化的方法,就是在建立的时候预先分配好空间来满足足够的增长幅度,在一个对象建立的时候要根据应用实际充分计算它们的大小,使得数据库在物理存储上和动态增长次数上达到一个比较好的平衡点,达到这些对象既不经常发生增长,也不过多占用数据库资源的目的。

2 数据库逻辑结构优化

Oracle数据库是由许多的数据库对象组成的,其逻辑结构的优化是指通过增加、减少或者调整数据库的逻辑结构来提高应用业务的效率,下面通过对索引的讨论来分析Oracle逻辑结构的优化。

索引是建立在表列上的数据库对象,它可以用于提高数据查询效率,但是其物理结构与逻辑结构都不依赖于表。在一个表上创建的索引数量和类型虽然不会影响表的使用方式,但会直接影响表中数据的查询效率。对表创建了索引,就不用对表进行全表扫描了,而是先对索引进行扫描,利用索引表可以迅速查询到符合条件的数据。索引的使用通常能提高SELETE、UPDATE及DELETE语句的性能,但并非多多益善,应遵循以下原则:

⑴ 为查询语句只选择少量的字段进行查询的表建立索引;

⑵ 在频繁进行排序或分组的列上建立索引;

⑶ 在不同值较多的列上建立索引;

⑷ 在多个带排序的列上建立符合索引。

3 数据库参数优化

Oracle最关键的参数有四个:SGA_MAX_SIZE,PGA_ AGGREGATE_TARGET,DB_CASHE_SIZE,SHARED_POOL_

SIZE。这四个参数决定着数据库的系统性能。

4 环境优化

4.1 优化内存

系统内存的配置应尽可能实现如下目标:减少分页、减少内存交换、尽可能让系统全局区(SGA)驻留内存。当系统执行分页操作时,会将当前没有使用的信息从内存移到硬盘上。从而为当前需要内存的程序分配空间。如果频繁的发生分页,系统的性能就会严重降低,程序的执行时间随之变长。当系统执行内存交换的时候,会将活动进程临时从内存转移到硬盘上,使得另一个活动进程进驻内存。内存交换基于系统循环时间,如果交换过于频繁,就会产生大量的输入/输出,导致应用程序性能大打折扣。

SGA区是Oracle分配的共享内存结构,它和Oracle进程结构组成一个Oracle数据库实例,包含数据库实例共享的数据和控制信息。负责管理数据库数据、应答用户请求,为用户提供服务。SGA对数据库性能有着很大的影响,它决定数据库高速缓存的命中率,减少重做日志缓冲区的申请失败率和等待时间,减少共享存储区中SQL语法的分析调用,保证共享池有足够的空间尤其重要,如果它被频繁的分页和交换,系统的性能将严重恶化。

可以通过以下措施合理配置内存:

⑴ 避免不必要的系统进程或者应用程序进程;

⑵ 将一些工作移到另一个操作系统中;

⑶ 配置操作系统核心使用更少的内存;

⑷ 保持SGA在单个共享内存段中;

⑸ 监控分页操作。

4.2 优化数据库磁盘输入、输出

磁盘的输入/输出速度对整个系统性能有重要影响,要解决好磁盘的输入/输出问题,主要解决磁盘竞争、输入/输出次数过多和数据块空间的分配管理。

⑴ 文件独立原则。在物理设计时,为了避免数据库文件之间的竞争,文件应该被放到不同的输入/输出通道,跨越驱动器的文件分离,避免磁盘争用成为瓶颈。把握以下几点技巧:把关键的数据文件分布在各个可用的磁盘上,这些文件包括SYSTEM表空间、TEMPORARY表空间、回滚段或者UNDO段、联机重做日志文件、操作系统文件、Oracle-Home下的关键Oracle文件、经常访问的表数据文件以及经常访问的索引数据文件;把数据和索引文件分开放置;对于经常链接的表,把它们的数据和索引表空间分开,这样每个表上的信息就不会放在相同的磁盘上;把控制文件的多个备份存储到不同的磁盘和控制器上。

⑵ 使用磁盘阵列[3]。随着硬件和文件系统的改进,磁盘阵价格的降低,RAID在提升Oracle数据库的输入/输出操作方面变得很重要。在RAID环境中,数据存放在多个磁盘上,采用奇偶拆分、奇偶校验实验数据的冗余、错误检查、数据分配和数据缓存,以减少数据库的输入输出负荷。

⑶ 使用分区。分区可能是提高与大型表有关的性能的最佳方法,通过访问一个表或者索引的较小片段,而不是访问整个表或者索引。数据在物理上是分开的,但在逻辑上是在一起的。使用分区可以很好的提高维护操作、备份、恢复、事务处理和查询的性能。

⑷ 应用裸设备。裸设备就是未经过格式化的磁盘分区,Oracle可以对其进行读和写操作,而没有输入/输出的缓冲开销。裸设备可以用于写操作频繁、顺序访问的数据和重做日志文件,但不能用在备份程序中。

4.3 优化CPU的使用

CPU是服务器的一项重要资源,服务器的良好工作状态是在工作高峰时使用率在90%以上,如果空闲时间就在90%以上,说明服务器缺乏CPU资源,应该通过增加CPU的数量或者主频,减少服务器上的负荷和提高数据库进程运行的优先级等方法来优化数据库服务器性能。

4.4 优化网络输入/输出

网络带宽会影响系统性能、减少网络负载,可以改善系统的性能[4]。减少网络输入/输出的原则是:将应用逻辑集中在数据库服务器中,可以使用Oracle数据库的完整约束性、数据触发器、存储过程、存储函数和包等,使在网络上传输的只是调用过程的名字和输出结果,大大减少网络输入/输出的负荷。

5 SQL语句优化

SQL是一种数据子语言,它将数据集合处理为组,而且可以定位在不同表中存储的数据。由于物理空间和索引时间等因素的限制,只能对表中查询频率最高的两个字段分别建立索引,而其余字段没有索引[5]。在实际应用当中,如果对其余没有索引的字段进行查询,就不可避免地需要对要查询的表进行全表扫描。对使用索引的SQL语句进行优化,其优化效果不甚明显。因此SQL语句优化的关键部分在于,对没有索引的字段进行查询时的SQL语句优化,如尽可能地减少表扫描的次数、使用应用端而不是服务端进行删除副本和数据排序操作、尽量使用存储过程进行查询等,以减少查询语句的响应时间。

现使用基于成本的ORACLE优化器和第三方工具对查询过程中需要运行的SQL语句进行优化。以常用的SQL语句为例说明这一过程。 SQL语句:

SELECT * FROM TABLE1 WHERE CON1 IN

UNION SELECT * FROM TABLE2 WHERE CON1 IN

……

UNION SELECT * FROM TABLEN WHERE CON1 IN

改写后的执行计划如下:

SELECT STATEMENT ALL_ROWS Cost: 360 Bytes: 656,

368,436 Cardinality: 9,652,477

211 UNION-ALL

7 CONCATENATION

3 INLIST ITERATOR

2 TABLE ACCESS BY INDEX ROWID DB_20061201

Cost: 6 Bytes: 68 Cardinality: 1

1 INDEX RANGE SCAN NON-UNIQUE DB_INDEXB_

6 INLIST ITERATOR

5 TABLE ACCESS BY INDEX ROWID DB_20061201

Cost: 6 Bytes: 68 Cardinality: 1

4 INDEX RANGE SCAN NON-UNIQUE DB_INDEX_

……

210 CONCATENATION

206 INLIST ITERATOR

205 TABLE ACCESS BY INDEX ROWID DB_20061230

Cost: 6 Bytes: 68 Cardinality: 1

204 INDEX RANGE SCAN NON-UNIQUE DB_INDEXB_

209 INLIST ITERATOR

208 TABLE ACCESS BY INDEX ROWID DB_20061230

Cost: 6 Bytes: 68 Cardinality: 1

207 INDEX RANGE SCAN NON-UNIQUE DB_INDEX_

6 结束语

数据库性能调整问题是贯穿数据库系统和应用系统整个生命周期的活动,优化数据库对提高系统效率,降低资源消耗,大幅提高海量数据的响应速度有重要意义。本文从CPU的优化、磁盘I/O的优化、内存的优化、数据库逻辑结构和物理结构的优化、网络环境的优化、SQL语句优化的方法,索引创建的相关规则等逐一对数据库的调整优化技术进行探讨。通过对比实施该优化方案前后的性能可知,数据库性能明显提升,这表明该方法有利于数据库的稳定性和可靠性的优化,保证了系统的稳定运行,从而解决系统运作过程中的各种问题,更有利于提升海量数据的响应速度,保证其对于现实工作的良好适应。

参考文献:

[2] 冯凤娟.Oracle数据库体系结构和管理[M].清华大学出版社,2003.

[3] Richard J.Niemiec.Oracle 9i performance tuning tips&techniques[M].

清华大学出版社,2006.

[4] 张韬.浅析Oracle数据库的性能优化[J].中国科技信息,2005.5.

热点推荐

上一篇:环境噪声监测中应注意的问题分析

下一篇:如何对幼儿进行德育教育论文 幼儿园关于德育教育之类的论文

最新演讲拉票一段话(通用7篇) 2023年幼儿园地球日新闻稿 幼儿园的新闻稿(大全9篇)