影响Oracle数据库系统性能的初始化参数

2024-04-15

影响Oracle数据库系统性能的初始化参数(共9篇)

篇1:影响Oracle数据库系统性能的初始化参数

影响Oracle数据库系统性能的初始化参数

具体影响Oracle系统性能的初始化参数如下:

SGA(系统全局区)

系统全局区(SGA)是一个分配给Oracle 的包含一个 Oracle 实例的数据库的控制信息内存段。

1、主要包括数据库高速缓存(the database buffer cache),

重演日志缓存(the redo log buffer),

共享池(the shared pool),

数据字典缓存(the data dictionary cache)以及其它各方面的信息。

db_block_buffers

1、数据高速缓冲区

2、访问过的数据都放在这一片内存区域,该参数越大,Oracle在内存中找到相同数据的可能性就越大,也即加快了查询速度。

3、db_block_buffers以块为单位,假如DB_BLOCK_SIZE=2K,db_block_buffers=3200,则占用内存=3200*2K=6400K。

share_pool_size

1、SQL共享缓冲池

2、该参数是库高速缓存和数据字典的高速缓存。

Log_buffer

1、重演日志缓冲区

sort_area_size

1、排序区

processes

1、同时连接的进程数

global_names

1、如果“数据库链路名”和它所要连接的“数据库”拥有相同的名字,则设置global_names = TRUE,否则,设置global_names = FALSE

db_block_size

1、数据库块大小

2、Oracle默认块为2KB,太小了,因为如果我们有一个8KB的数据,则2KB块的数据库要读4次盘,才能读完,

而8KB块的数据库只要1次就读完了,大大减少了I/O操作。

3、数据库安装完成后,就不能再改变db_block_size的值了,只能重新建立数据库,并且建库时,要选择手工安装数据库。

open_links

1、同时打开的链接数

dml_locks

1、用户一次可对表设定锁的最大数目

2、如果有三个用户修改6个表,则需18个DML锁来实现并行操作,如果设定DML_LOCKS不够大,操作时执行将中断,你可以通过你的应用程序的操作规模和最大的并行使用的用户数来估算系统所需要的DML_LOCKS的`值,但该值的大小对数据库的其他性能没有影响,所以一般都把它设得很大,远超过实际中可能达到的值,如果在系统运行中经常发生表锁死的现象,就应该考虑加大该值。

open_cursors

1、打开光标数

2、这个参数可以同时被每个用户进程拥有,这个参数的最大值依操作系统不同而不同。

3、在创建一个包含很多表的合成视图时,如果此参数很小,则视图创建会不成功。

dbwr_io_slaves

1、后台写进程数

篇2:影响Oracle数据库系统性能的初始化参数

通常情况下,Oracle数据库会先将这些临时数据存放到内存的PGA(程序全局区)内。在这个程序全局区中有一个叫做排序区的地方,专门用来存放这些因为排序操作而产生的临时数据。但是这个分区的容量是有限的。当这个分区的大小不足以容纳排序后所产生的记录时,数据库系统就会将临时数据存放到临时表空间中。这就是临时表空间的来历。看起来好像这个临时表空间是个临时工,对于数据库的影响不会有多大。其实大家这是误解这个临时表空间了。在用户进行数据库操作时,排序、分组汇总、索引这些作业是少不了,其会产生大量的临时数据。为此基本上每个数据库都需要用到临时表空间。而如果这个临时表空间设置不当的话,则会给数据库性能带来很大的负面影响。为此管理员在维护这个临时表空间的时候,不能够掉以轻心。要避免因为临时表空间设置不当影响数据库的性能。具体来说,主要需要注意如下几个方面的内容。

一、创建用户时要记得为用户创建临时表空间。

最好在创建用户时为用户指定临时表空间。如可以利用语句default temporary table space语句来为数据库设置默认的临时表空间。不过在Oracle数据库中这个不是强制的。但是笔者强烈建议这么做。因为如果没有为用户指定默认临时表空间的话,那么当这个用户因为排序等操作需要使用到临时表空间的话,数据库系统就会“自作聪明”的利用系统表空间SYSTEM来创建临时段。众所周知,这是一个系统表空间。由于在这个表空间中存放着系统运行相关的数据,一般的建议是用户的数据不能够保存在这个表空间中。那么如果将用户的临时表空间防止在这个系统表空间之内,会产生什么负面影响呢?

由于临时表空间中的数据是临时的。为此数据库系统需要频繁的分配和释放临时段。这些频繁的操作会在系统表空间中产生大量的存储碎片。当这些存储碎片比较多时,就会影响系统读取硬盘的效率,从而影响数据库的性能。其次系统表空间的大小往往是有限制的。此时临时段也来插一脚,就会占用系统表空间的大小。

为此数据库管理员需要注意一点,当没有为用户指定临时表空间时,用户排序等操作仍然需要用到临时段。此时数据库系统就会将临时段放入到系统表空间中。为此就会对数据库的性能产生不利的影响。所以笔者建议各位读者与数据库管理员,在创建用户的时候同时为用户指定一个默认的表空间,以减少临时段对系统表空间的占用。

二、合理设置PGA,减少临时表空间使用的几率。

当排序操作产生临时数据时,数据库并不是马上将其存储在临时表空间中。通常情况下,会先将这些临时数据存储在内存的PGA程序全局区内。只有当这个程序全局区无法容纳全部数据时,数据库系统才会启用临时表空间中的临时段来保存这些数据。但是众所周知,操作系统从内存中读取数据要比从硬盘中读取数据块几千倍。为此比较理想的情况是,这个程序全局区足够的大,可以容纳所有的临时数据。此时数据库系统就永远用不到临时表空间了,

从而可以提高数据库的性能。

但是这毕竟只是一个理想。由于内存大小等多方面的限制,这个PGA程序区的大小往往是有限制的。所以在进行一些大型的排序操作时,这个临时表空间仍然少不了。现在数据库管理员可以做的就是合理设置这个PGA程序全局区的大小,尽量减少临时表空间使用的几率。如在实际工作中,数据库管理员可以根据需要来设置初始化参数SORT_AREA_SIZE参数。这个参数主要控制这个PGA程序全局区内排序区的大小。通常情况下,如果这个数据库系统主要用来查询并且需要大量的排序、分组汇总、索引等操作时,那么可以适当调整这个参数,来扩大PGA分区的大小。相反,如果这个系统主要用于更新操作,或者在这个数据库服务器上还部署由其他的应用程序,那么这个PGA分区就不能够占用太多的内存,以防止对其他应用程序产生不利的影响。所以说,数据库官员不能够一刀切,需要根据实际情况来调整。在必要的情况下,可以增加系统内存来增加PGA分区的大小,从而降低临时表空间的使用几率,以提高数据库的排序、分组汇总等操作的性能。

总之,如果临时段被频繁使用的话,由于内存与硬盘在性能上的差异,从而会降低数据库的性能。为此在平时工作中,数据库管理员还需要监控临时表空间的使用情况,以判断是否需要采取措施来减少临时表空间的使用来提高数据库的查询性能。为了实现这个目的,笔者建议数据库管理员可以查看v0_segment这张动态性能视图。通过这张动态性能视图可以查看系统排序段(临时段的一种)的使用情况。另外通过动态性能视图v0_usage还可以查询使用排序段的用户与会话信息。从而为数据库管理员优化数据库性能提供数据上的支持。对于这个排序段,笔者还要说明一点。对于排序段来说,同一个例程的所有SQL语句(如果需要排序操作的话)都将共享同一个排序段。并且排序段在第一次需要用到时被创建。排序完成后这个排序段不会被释放,只有在这个历程关闭后排序段才会被释放。为此以上两张视图要综合起来分析,才能够得到数据库管理员想要的信息。

三、要为临时表空间保留足够的硬盘空间。

其他表空间对应的数据文件,在其创建时就会被完全分配和初始化,即在其创建时就会被分配存储空间。但是临时表空间对应的临时文件则不同。如在Linux操作系统中,临时表空间创建时系统是不会分配和初始化临时文件的。也就是说,不会为临时文件分配存储空间。只有临时数据出现需要用到临时文件的时候,系统才会在硬盘上分配一块地方用来保存临时文件。此时就可能会产生一个问题,即当需要用到临时文件系统为其分配空间的时候,才会先系统分区中没有足够的存储空间了。此时就会产生一些难以预料的后果。

为此对于这些临时文件,数据库管理员最好能够预先为其保留足够的空间。如在Linux操作系统中,可以将其防止在一个独立的分区内,不允许其他应用程序使用。如此的话,就不用担心临时文件没有地方存储了。另外由于临时表空间主要用来存放一些排序用的临时文件。为此如果能够将这个临时表空间存放在性能比较好的分区中,还可以提高数据库系统读取临时表空间中数据的速度。另外由于系统需要频繁分配临时表空间中的数据,为此临时表空间所在的分区会出现比较多的碎片。此时如果将临时表空间存放在一个独立的分区内,那么数据库管理员就可以单独对这个分区进行碎片整理,从而提高这个分区的性能。所以无论出于什么原因,将临时表空间防止在一个独立的分区内,是一个不错的想法。不仅可以保证临时文件有存储的空间,而且还可以提高数据库的性能。

篇3:影响Oracle数据库系统性能的初始化参数

关键词:Oracle,性能优化,SQL

0 引言

Oracle作为一种大型的数据库系统被广泛应用在电力、电信、金融、民航等重要部门。在实际应用中, 随着系统中数据的增加, 访问量的加大, 常常会出现系统响应迟缓, 性能下降的问题。围绕数据库应用系统的性能优化, 目前在业界已有一些研究成果。本文从软件产品生命周期的设计、编码及部署阶段入手, 结合多年的实际工作经验, 分析了在软件开发过程中影响性能瓶颈的诸多因素, 给出了基于Oracle数据库管理系统的优化方法及策略。

1 设计阶段上的优化

设计阶段是软件开发中仅次于需求分析之后的第二阶段, 如果能够进行科学、合理的设计, 能够有效避免许多在后继阶段中引起的系统性能问题。一旦数据库设计付诸实施, 我们将很难在应用环境中改变数据库的设计。因此, 本阶段的控制措施十分重要!这里从性能分析的角度, 重点阐述数据库对象的优化设计和应用逻辑实现设计两部分。

1.1 数据库对象设计

数据库对象优化设计的重点在数据库基表设计、索引设计和数据库系统整体性能设计三个方面。

1.1.1 数据库基表设计

人们在开始进行数据库基表设计的时候, 很容易忽略基表在数据量很大的情况下, 是否会引起应用性能下降问题, 以及日常维护、备份恢复、数据清理等工作是否也会因此而受到影响。而往往在系统投入运行以后才发现随着系统业务量的增大, 正常的使用、日常的备份、以及数据清理等操作会变得越来越耗时, 甚至达到无法在业务给定的时间内完成的地步, 给客户及使用单位带来许多无法想象的麻烦。因此系统的数据库基表的设计十分重要。

对于大的数据库基表, 我们可以采用数据库分区技术来优化产品的应用性能, 同时也能大大简化DBA对于这些大尺寸库表的日常维护工作, 做到防患于未然。

1.1.2 索引设计

在数据库设计中, 另一个与应用系统性能有很大关系的问题是建立合适的索引。设计好的索引结构, 可以避免查询时的全表扫描, 加快查询速度。而在实际应用中, 常常没有制定有效的索引管理策略, 许多应用系统的索引都是在开发人员在编写代码时看到需要索引就创建一个索引, 而较少甚至根本不去查看和分析已有的索引是否可以利用。随着应用功能的扩展, 索引数量只是简单地增加, 而很少考虑重复利用、合并和删除重复索引。最终导致雷同或可合并的索引大量存在, 不但消耗大量的空间, 还影响库表记录的增、删性能。

1.1.3 数据库系统整体性能设计

这部分设计的重点在于尽量减少I/O争用、分散I/O。如果对于基表和索引的存储位置没有进行合理分布, 则很容易在系统中造成热点数据, 使系统的并发处理能力大打折扣。在实际应用中一般可遵循以下几条策略:

将表和索引分散在不同的I/O单元上;

将需要经常关联的表分散在不同的I/O单元上;

对于热点访问的基表和索引, 尽量分散在尽可能多的数据块甚至不同硬盘上。可以将基表和索引存放在RAID0或RAID5的磁盘阵列中;或使用很大的PCTFREE存储参数, 使数据量尽量分散在不同的数据块中, 使数据稀疏化;

应用Oracle的LMT本地表空间管理和ASSM自动段存储管理技术管理数据块的表空间和基表索引等存储对象, 以提高I/O请求并发率。

1.2 应用逻辑设计

在应用逻辑设计过程中, 较普遍存在的问题是仅关注如何通过SQL语句实现应用逻辑的功能, 但很少分析SQL语句应以什么样的执行计划运行效率最佳;很少分析执行计划是应确保始终不变, 还是需要随着数据分布的变动而相应的变动, 以及如何变动进行设计。

在一个应用系统中存在大量的SQL语句, 很难做到针对每一条SQL语句都进行完善的分析设计工作。因此, 可以运用“2-8原则”的思想, 对执行时间长, 或并发量大的SQL语句精心设计“理想执行计划”, 使其性能得以优化。

2 编码阶段上的优化

在数据库应用系统中, 造成应用程序反应缓慢、系统资源消耗大的直接原因常常是不良的SQL语句。往往一个不良的SQL语句会导致整个数据库系统高负荷运转, 甚至对外暂停服务。因此在编码阶段应首先对SQL语句进行优化。

另外尽量使用存储过程。有些不需和客户端交互太多、处理的数据量较大的程序, 例如报表, 可以使用存储过程实现。这样可以减少网络流量, 而且存储过程本身是编译好的, 经过一些优化处理。降低事务执行的粒度。某些业务处理的数据量较大, 如果写成一个SQL语句或放在一个事务中, 执行起来会占用系统很多资源, 影响其它业务的执行, 可以考虑降低粒度, 分成多次执行。

3 部署阶段上的优化

在此阶段中经常会遇到在开发环境执行效率很高的应用部署到生产系统中后, 性能却很不理想的情况, 引发这种情况很多时候是因为部分SQL在部署到生产环境之后, 由于实际的数据分配与测试环境不同, 导致Oracle的CBO生成了不同于开发环境下生成的执行计划。

在这一阶段, 我们可以从开发环境中提取出最优的SQL执行计划集合, 部署到生产系统中, 以固定需要固定执行计划的SQL。此外在部署阶段还应该注意不断跟踪、优化不良的SQL语句。

4 结束语

Oracle数据库应用系统的性能优化是一个复杂、繁琐的系统工程, 涉及的方面有很多, 我们认为系统性能在70%以上由应用系统的结构设计和SQL语句来决定, 数据库端可调性只有20%左右, 因此这里我们重点强调了产品开发在设计、编码及部署阶段在性能方面容易引起瓶颈的因素及解决方法, 希望能在产品投入使用之前就引起性能方面的重视及改善。实践证明, 上述措施行之有效。

当然对系统的优化调整不是一次性的, 还需要在使用过程中不断反复调整, 但如果在产品实施之初就开始注意性能的优化问题, 对以后的系统维护会减少很多负担, 从而提升软件产品的整体性能。

参考文献

[1]陈峰.关于改善ORACLE数据库应用软件产品性能品质的研究:硕士学位论文.北京:北京邮电大学, 20011.

[2]Thomas Kyte.苏金国王晓振等译.Oracle 9i&10g编程艺术.人民邮电出版社, 2009

篇4:影响Oracle数据库系统性能的初始化参数

关键词:信息系统;Oracle数据库;性能优化

中图分类号:TP392

从我国实况来看信息系统还存在各种不足,比如怎样充分发挥计算机系统资源,怎样确保用户的服务质量及响应速度等。因此,研究优化Oracle数据库的性能具有适用价值。

1 信息系统Oracle数据库性能优化

笔者就从Oracle数据库系统中选择I/O、内存、SQL语句以及网络性能方面入手,分析这些组成部分在运行中性能发送的一些问题,并且针对这些问题提出合理的优化措施。

1.1 对内存进行优化

优化内存比较常用方法就是调整系统的全局区(SGA)。具体操作就是调整内存中各种组件,包含JAVA池、缓冲区高速缓存等,对内存结构进行调整时需要加大SGA大小,但是必须要确保SGAS长度一定在实际所用内存范围之中。

1.2 调整共享池

共享池主要有两个部分组成,即高速缓存和数据字典缓存。其参数就确定了共享池的大小。而在高速缓存模块中又是由SQL语句文本,执行计划以及PL/SQL块、JAVA类共同组成。将“select namespace,gethitratio from v$librarycache”输送到执行栏目中,就能够从数据库中获取到缓存的统计信息。在该执行语句中gethitratio主要是实现查询对象的句柄标识名字和次数之间比率。在该数据库中,如果该比率低于了95%,就要进行调整。其查询语句是“select sum(pins-reloads)/sum(pins)*100 from v$librarycache”,通过执行该局于就可以得到高速缓存命中率。数据字典的缓存就是把数据字典中所含的各种信息存储进去。SQL语句查询对象信息时是通过数据字典进行高速存取,降低了不缓存之时从数据字典中查询的次数,通过这种查询方式就能够提升其性能。而且对v$rowcache动态性能视图进行查询,可以得到数据字典中缓存相关信息,输入执行语句“select(sum(gets-getmisses))/sum(gets) from v$rowcache”,通过执行后就可以得到数据字典中的缓存命中率。一旦最终结果值低于85%,必然要增大共享池容量才可以。

1.3 调整缓冲区的高速缓存

在SGA中,高速缓存是重要的组件之一,在执行保持之时高速缓存区就是负责对磁盘中相关数据进行读取、拷贝,保持服务器就能够对所有拷贝块进行共享。假如该服务器要得到数据块,就会先到高速缓存之中去查询所需数据,如果需要的数据在这个缓冲区之中,那么该进程就可以从高速缓冲区之中直接读取所需数据,如果数据并未在这个高速缓存之中,必然会从磁盘中相关数据文件进行读取,同时还将所读取数据存储进高速缓存之中,之后这些存储的数据就能够被服务器的进程使用。因此要尽可能让进程读取缓冲区的高速缓存中数据,并且经过相关的查询语句就可以执行,还能够通过查询得到使用高速缓存各种情况。

1.4 调整重做日志缓冲区

重做日志的缓冲区,也就要在内存中对高速缓存进行重做。一般情况下,该缓冲区的容量有1MB就可以的。但是该缓冲区一旦占据的空间三分之一,就会发出“rollback”和“commit”的命令,或者将DBWn进程写进到LGWR之中,通过这种方式就可以重做日志的缓冲区,将磁盘中重新写入内容。如果要想恢复数据库,必须要通过重做日志的缓冲区之中各种项目,这一种操作非常重要。要查询重做日志缓冲区中效率,输入相关的查询语句就能够查询结果,最终查询结果值只有接近0才正常,假如这个值不断的增大,就要适当增大log_buffer大小。

1.5 优化I/O

事实上,影响Oracle数据库性能一种主要原因就是磁盘I/O,一旦解决好了I/O,就能够有效提升数据库性能,配置数据库性能准则即为尽可能的降低磁盘I/O及平衡多个磁盘的驱动器,并且还要尽可能使用本地管理的空间,对动态视图进行查询就可以得到数据文件中的I/O 性能。在平衡I/O,能够采用的策略主要有如下几种:

(1)把访问次数比较多的数据文件促进独立的磁盘上。

(2)给用户数据创建出单独的表空间,并且把这个表空间单独放到system表中。

(3)有几个数据文件存在于同样表空间之中,就要存放到不同的磁盘之中。

(4)索引应该处于独立表空间中,还应该把索引以及表的数据存放至不同磁盘之中。

(5)构建出临时的表空间,用来实现排序操作,这样就能够有效阻止数据库中碎片进入表空间中,同时创建独立表空间给回滚段。

(6)尽可能做大日志文件,避免切换日志过于频繁;同时重做日志文件不要和数据库文件放进同一个磁盘中,降低磁盘之间的竞争。

1.6 优化CPU

当数据库中的I/O操作到了最低的程度,同时也分配了足够的内存,但是应用软件依然遭到CPU约束。优化CPU目标就要让CPU尽可能滿足用户所需,同时尽可能减小等待以及额外的开销影响到CPU,并且服务器能不能够正常的工作直接关系着CPU,当工作高峰CPU使用率处于90%标识着服务器具有良好工作状态。但是假如空闲之时CPU的使用率超过了90%,说明服务器中的CPU资源不足。如果出于工作的高峰,CPU的使用率依然比较低,这就说明服务器中的CPU资源比较充足。

在运行中,管理数据库人员只要查询数据字典中相关统计项,就可以查询Oracle 数据库使用CPU所占据时间,同时将相关查询语句输入到执行程序中,就可以获取到该操作系统使用了CPU所占据的时间,当然操作系统使用时间也就是用户态+系统态的时间总和。数据库占据了时间超过了总时间90%,这就说明服务器之中CPU几乎都让Oracle数据库占据了,表明运行良好;如果其他各种程序将CPU资源全部占有,Oracle数据库必然无法活儿更多的CPU资源及时间。查询v$sesstat数据字典就能够知道目前所连接的Oracle 数据库中每一个回话所占用CPU时间,就能够知道会话所占用服务器CPU的时间情况,以及导致CPU资源缺乏根源,事实上重解析SQL语句,锁冲突等均可能造成CPU资源严重不足。管理人员将相关查询语句输入,该语句能够查询解析SQL语句的情况,执行语句中的parse time cpu就表示出系统所用时间,执行语句中的parse time elapsed为响应时间,而用户等待的时间采用公式可获取。而且从该公式之中还能够得到解析SQL语句中平均等待的时间,如果这个平均值靠近0,就表明系统正常,一旦等待解析的平均时间较长,就要从中查询解析效率比较低,应该优化相关的语句,同时还应该改变Oracle中的参数,通过参数来增加高速缓存的光标数值。当然,数据库的管理人员还能够采取查询语言(select buffer_gets, executions, sql_textfrom v$sqlarea),而且该查询语句还能够对低效率的SQL语句进行查询,对该语句进行优化同样能够提升CPU利用效率。

1.7 优化网络性能

数据库的应用不断增加,自然网络这个承载数据库服务器的平台至关重要,直接影响着用户发送数据。因此,调整网络性能也是必然趋势,而优化网络就需要尽可能降低网络中数据流量,从而降低了网络资源的使用。

1.7.1 Oracle 网络协议

Oracle数据库比较常用的网络协议为SQL*Net或者Net 8,该协议处于七层开放式的回话层中,将透明连通性提供给Oracle服务器与客户端。透明连通性就是通过接口层SQL*Net/Net 8接收来自Oracle应用的SQL语句。而且按照相关的标准格式打成包,同时把该包传送至数据库。SQL*Net/Net 8主要是用来负责构建及维护客户和服务器间的网络会话。

1.7.2 检测网络性能的方法。数据通过了网络程序之后必然会出现延迟,因此就需要优化其性能,才能够有效保障网络的吞吐量,才能够降低网络的流量。从使用现状分析可知,要想非常精确的确定出网络的延迟十分困难。但是在Oracle数据库中设计了三个动态性能表,这些表就能够用来测量出网络延迟,这些表分别是v$session_event,v$session_wait与v$sesstat。

(1)v$session_even,该操作主要是操作时Oracle的等待时间,该值就可以多网络效率进行有效评估。

(2)v$session_event;将目前正在运行的会话(等待事件)全部列出来,所谓等待事件就是说明共享或者前台进程中正处于等待的消息。只要存在等待事件,一定要查询等待事件是不是被Oracle接收或者被客户端发送,而且还能够查该表是不是意外被中止,只要客户端发出消息就能够确定出Oracle是否已经作出回应或者依然在等待。

(3)通过v$sesstat查看已经接收或者发送到客户端的字节数,还能够查询到客户端传递过来的请求数目。

2 结束语

笔者依据自身经验,做了如上Oracle数据库相关优化探讨。但是该分析属于一项比较复杂工作,涉及到多个方面,不但要具备扎实数据库技术,还要非常熟悉操作系统、硬件设备以及机器结构等各个方面。笔者全面了解了Oracle体系结构,并且探讨了对该体系结构的优化,包含了优化I/O、优化内存等等,从而更确保了房产信息系统的实时监控。

参考文献:

[1]翟岩龙,宿红毅,战守义.数据库性能监控体系的研究与应用[J].计算机科学,2009(11).

[2]王娜,宿红毅,白琳等.数据库性能监控分析系统的设计与实现[J].计算机工程,2010(24).

[3]滕永昌.Oracle10g数据库管理系统[M].北京:机械工业出版社,2012.

[4]杨华千,刘勇国,杨德刚,廖晓峰.Oracle的存儲体系结构及其对象空间分配研究[J].计算机科学,2013(09).

作者简介:冯育栋(1982.09-),男,江苏靖江人,科员,本科,研究方向:信息系统管理维护。

篇5:影响Oracle数据库系统性能的初始化参数

分区

根据实际经验,在一个大数据库中,数据库空间的绝大多数是被少量的表所占有。为了简化大型数据库的管理,改善应用的查询性能,一般可以使用分区这种手段。所谓分区就是动态地将表中的记录分离到若干不同的表空间上,使数据在物理上被分割开来,便于维护、备份、恢复、事务及查询性能。当使用的时候可建立一个连接所有分区的视图,使其在逻辑上仍以一个整体出现。

1. 建立分区表

Create table Employee ( EmpNo varchar2(10) primary key, Name varchar2(30), DeptNo Number(2) ) Partition by range(DeptNo) ( partition PART1 values less than (11) tablespace PART1_TS, partition PART2 values less than (21) tablespace PART2_TS, partition PART3 values less than (31) tablespace PART3_TS partition PART4 values less than (MAXvalue) tablespace PART4_TS );

表Employee依据DeptNo列进行分区。

2. 分区索引

Create index Employee_DeptNo on Employee(DeptNo) local ( partition PART1 tablespace PART1_NDX_TS, partition PART2 tablespace PART2_NDX_TS, partition PART3 tablespace PART3_NDX_TS, partition PART4 tablespace PART4_NDX_TS, );

当分区中出现许多事务并且要保证所有分区中的数据记录的惟一性时采用全局索引,在建立全局索引时,Global子句允许指定索引的范围值,这个范围值可以不同于表分区的范围值,

只有建立局部索引才会使索引分区与表分区间建立起一一对应关系。因此,在大多数情况下,应该使用局部索引分区。若使用了此索引,分区就能够很容易地将索引分区与表分区建立关联,局部索引比全局索引更易于管理。

[next]

3. 分区管理

根据实际需要,还可以使用Alter table 命令来增加、删除、交换、移动、修改、重命名、划分、截短一个已存在分区的结构。

重建索引

如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,只是因为索引中无效空间会增加。

要回收那些曾被删除记录使用的空间,需要使用Alter index rebuild 命令。可以做一个定期运行的批处理程序,来重建最活动表的索引。这个批处理程序可以在空闲时运行,以避免该程序与其他应用程序冲突。若能坚持索引的这一程序规划,便可以及时回收那些未使用空间,提高空间利用率。

段的碎片整理

当生成一个数据库对象时(一个表或一个索引),通过用户缺省值或指定值来为它指定表空间。一个在表空间中生成的段,用于存储对象的相关数据。在段被关闭、收缩、截断之前,段所分配的空间将不被释放。

一个段是由范围组成,而范围是由相邻的Oracle块组成。一旦存在的范围不能再存储新的数据,这个段就会去获得新的范围,但并不要求这些范围是彼此相邻的。这样的扩展会一直继续下去,直到表空间中的数据文件不能提供更多的自由空间,或者范围数量已达到极限。

因此,一个碎片太多的数据段,不仅会影响运行,也会引发表空间中的空间管理问题。所以,每个数据段只含有一个范围是十分有益的。借助监控系统,可以通过检查DBA_SEGMENTS数据字典视图来了解哪些数据库对象含有10个或更多范围的段,确定其数据段碎片。

若一个段的碎片过多,可用两种方法解决:

1. 用正确的存储参数建立一个新表,将旧表中的数据插入到新表中,再删除旧表;

2. 利用Export/Import工具。

篇6:影响Oracle数据库系统性能的初始化参数

随着信息化技术的不断发展, 越来越多的企业开始管理创新, 广泛的应用信息化管理系统, 从而提升企业的现代化管理水平。而信息化管理系统基本上都是建立在数据库系统的基础上的各种功能的实现, 因此数据库系统性能的高低, 就会直接影响应用系统的性能。而且一般来说当大型数据库在运行一段时间之后, 由于存在着大量的数据, 在运算速度上就会不同程度的受到影响, 而计算机操作系统、内存、应用程序算法以及数据库服务器等诸多元素都会对数据库系统的性能构成重要的影响。

2 数据库系统主要性能的评价指标分析

数据库系统性能评价指标主要有以下几点:

2.1 系统吞吐量

这个指标指的是单位时间里, 数据库系统所能够完成SQL语句的执行数量。通过是以每秒事务量 (tps) 来衡量。系统吞吐量越高, 那么系统反应时间和执行速度也会越快。

2.2 用户响应时间

这主要指的是用户向数据库提交SQL执行语句开始, 到数据库执行并向用户反馈结果集这段时间, 也就是应用系统的反应时间, 主要是以毫秒来衡量。通常分为CPU执行时间和用户等待时间两种。

2.3 数据库命中率

Oracle数据库系统中, 用户进程所使用到的数据都会先集中在缓冲区, 也就是会集中到系统内存中, 这样能够提升数据读取效率, 如果内存数据能够符合用户的需要, 那么命中率就会越高, 那么系统执行效率就会越高。第四, 内存使用情况。这主要体现在共享内存和运行内存以及永久内存三个存储空间的科学分配上, 内存利用效率越高, 系统性能就会越高。第五, 磁盘I/O速度。因为大量的数据都会存储在硬盘上, 因此从硬盘数据转移到内存单位时间I/O规模越大, 那么速度就会越快, 就能够有效缩短用户响应时间, 从而提升数据库系统性能。

3 Oracle数据库应用系统的优化技术分析

3.1 SQL语句的优化

SQL语句是操作数据库的脚本语言, 如果SQL语句能够在优化器的作用下, 能够充分利用数据库的索引表, 那么就能够有效减少数据库扫描索引表的I/O次数, 就能够提升数据执行效率。而优化SQL语句的主要步骤有以下几点:

(1) 查找存有问题的SQL语句, 对这些语句进行提前优化, 发现问题就能够有效降低错误的读取数据库的频度, 查找问题SQL语句的主要方法主要是通过搜集统计数据功能, 在Oracle数据库管理系统中含有DBMSSTATS包以及ANALYZE解析命令, 其中DBMSSTATS包主要是搜集有关链接数据行的相关统计数据, 语法结构为:exec DBMS_SATS.gather_table_stats (owname’, ’t ablename’, ’partnmae’) 。而ANALYZE解析命令则是分析数据簇的相关情况。其主要的语法结构为ANALYEZE CLUSTER Cluste_name Computer STATISTICS。然后再使用SQLTrace32对SQL语句进行分析, oracle中的udump管理区就会对SQL语句进行跟踪, 对语法的解析和执行以及CPU时间和语法执行时间和逻辑读取的次数等参数进行记录, 接着在通过Oracle Enterprise Manager Console图形工具获得数据库相应的性能指标信息, 从而为SQL语句优化提供重要的参考。

(2) 构建正确的SQL语句, 提升查询效率。在使用SQL语句时要规避索引不能够和用户表空间建立在同一个磁盘上, 这样会造成大量的资源浪费现象。另外WHERE的子句的查询顺序也要进行优化, 注意从上至下的顺序进行查询, 同时表之间的连接要出现在其他WHERE标识符之前, 这样就能够有效减少调用数据库的数据量, 从而提升SQL语句的执行效率。

3.2 Oracle内存优化调整

Oracle数据库管理系统中, 其内存结构相对其他数据库管理系统而言相对复杂, 主要影响的参数包括Shared pool, Database Buffer Cache以及Java Pool等。对于Oracle的内存结构的优化主要可以从下面几个方面着手:

3.2.1 对Shared pool进行优化

也就是对共享池的大小进行合理优化。共享池主要是缓冲区以及数据字典高速缓冲区的重要存放点, 如果数据库缓冲区设置较小, 那么就会影响到数据使用性能。如果缓冲区过大, 随着使用次数的不断增加, 就会造成大量的数据碎片, 于是也会逐渐降低系统的性能。通常提升数据库缓冲区的命中率可以通过下面的执行语句来进行优化:Select (1-sum (reloads/sum (pins) ) ) from v$librarycache。执行这个SQL语句之后, 返回的结果如果小于0.95, 那么就需要增加这个共享池大小, 来提升缓冲区命中率。而优化数据字典缓存则可以通过下面的SQL语句来优化:select sum (1- (getmisses) / (sum (gets) +sum (getmisses) ) ) from v$rowcache。如果这个SQL语句的执行值小于0.85, 那也要增大共享池大小来优化内存结构。

3.2.2 对高速缓存进行优化

如果缓冲区中包含的高速缓存空间越大, 那么载入到内存中的数据量就会越大, 那么I/O存取效率就会越高, 对此可以通过下面的语法来进行优化:select name, value from v$sysstat where name in (‘dbblokcgets’, ’consistent gets’, ’Physical reads’) 。执行这个SQL语句之后, 如果返回的值小于0.85, 那么就需要增加缓冲区高速缓存的值来提升数据库的性能。

3.2.3 优化日志缓冲区

如果日志缓冲区分配值太小, 那么就没有充分的空间来防止重做条目, 从而延长等待时间。对此可以从下面这个语句来查看日志缓存区是否满足需求:Select name, value from v$sysstat where name=’redo log space requests’。如果这个语句执行之后, 得到的结果为0, 那就不需要进行调整, 否则就需要增加日志缓存, 通常可以上调5%左右, 然后重复执行这个语法, 直到最终的返回值接近0。

3.3 针对oracle的表空间进行优化

表空间是Oracle数据库管理系统的重要创新, 合理使用表空间能够有效提升数据库的性能。对此可以从下面几个方面来着手优化:

3.3.1 科学规划表空间

将数据和索引分到不同的表空间, 这样能够有效降低I/O竞争。在修改应用上, 将重演日志和归档日志进行分开, 尽可能将90%以上的输入输出操作放在系统表空间中, 或者在索引表空间和回滚表空间中。

3.3.2 优化表空间的结构

对此首先就要分离系统表空间, 彻底规避在系统表空间中存储大量非系统用户对象, 这样就会造成数据维护的数据调用重复读, 从而降低数据库系能。然后就要分离索引段。特别要规避和相关的数据段存储在同一个表空间中, 如果调用同一个数据, 就会重复执行输入输出操作, 同时还容易出现冲突, 导致时间等待, 从而降低数据库利用效率。最后要分离临时表空间, 临时的表空间不应该和其他类型的段放在一起存储, 这对于数据库性能的影响也非常明显。

4 结语

总而言之, Oracle数据库管理系统的功能非常强大, 在应用Oracle数据库时, 需要结合相应的硬件环境, 同时在软件性能上采用科学的数据库布局模式, 再加上合理的内存分配, SQL语句的优化以及表空间的优化, 就能够有效提升Oracle数据库性能, 从而提升应用系统的性能。

摘要:数据库性能的高低, 对于企业管理水平和工作效率的提升都具有非常重要的作用。本文在分析数据库系统主要的性能评价指标基础上, 提出了Oracle数据库应用系统的主要优化措施, 从而为提升数据库性能提供一定的参考。

关键词:Oracle数据库,性能优化,内存分配

参考文献

[1]李可可.浅析Oracle数据库的性能优化方法[J].硅谷, 2011 (02) .

篇7:影响Oracle数据库系统性能的初始化参数

关键词:Oracle数据库;性能优化;内存调整;磁盘I/O调整;调整竞争

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)12-21504-02

Based on Oracle9i Database System Performance Optimization

ZHU Qing

(Anhui hospitals clinics, Hefei 230001,China)

Abstract:Oracle in the performance optimization of the database business in the best condition of great significance. Through the use of Oracle adjustment memory, disk input and output hits and z methods for optimization process to explore, to be quite satisfied with the results.

Key words:Oracle database; Performance optimization; Memory adjustments; Disk I / O adjustment; Competition adjustment

1 引言

目前在我国,Oracle是跨应用平台最多、应用行业范围最广的数据库管理系统。其跨平台体现在支持多种硬件平台,比如个人电脑Intel体系架构和IBM小型机Power体系架构以及Sun小型机Sparc体系架构等,跨越的操作系统包括微软Windows系列、IBM AIX 4/5系列、Linux 系列以及HP-UX 10/11和Sun Solaris 10等平台。就行业范围应用来说,Oracle以其先进的数据庫引擎和开发工具技术占领了诸如政府、医疗、金融、保险、证券、教育、电信等多个核心应用的底层数据库市场。

对于数据库管理员来说,发挥Oracle的强大特性为核心业务服务,切实增加高性能的最直接的方法就是Oracle性能优化。在优化性能的过程中可以就性能问题采用大量的参数调整和技术。性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的;二是开发人员通过对应用程序的优化达到调整的目的。在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。

2 调整内存分配

系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段。SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应现在大多数业务系统的需要。这些参数若不作调整,会对系统资源造成巨大浪费。就某医院信息管理系统HIS的IBM p570而言,其内存16G中SGA的大小以13G左右为宜,剩下的3G内存提供操作系统以及其他的非数据库应用。

比如下面操作系统监控中,绿色框内的就是内存大致分配情况。

#topas

图1

初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数DB_BLOCK_BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED_POOL_SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。

DB_BLOCK_BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个缓冲区的大小等于参数DB_BLOCK_SIZE的大小。ORACLE数据库块以字节表示大小。以HIS为例,其采用了8G内存为DB_BLOCK_BUFFERS。

Oracle SGA共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成,共享池是最大的消耗成分。调整SGA区各个结构的大小,可以极大地提高系统的性能。以HIS为例,其采用了800M内存为SHARED_POOL_SIZE。

(1)调整Library Cache

库高速缓存(Library Cache)中包含私用和共享SQL区和PL/SQL区。调整SGA的重要问题是确保库高速缓存足够大,以使ORACLE能在共享池中保持分析和执行语句,提高语句分析和执行效率,降低资源消耗。通过比较Library Cache的命中率来决定它的大小。查询V$LIBRARYCACHE 数据字典视图(其中,pins表示高速缓存命中率,reloads表示高速缓存失败)

SQL>SELECT SUM(pins),SUM(reloads) FROM v$librarycache;

如果sum(reload)/sum(pins)≈0,说明Library Cache的命中率比较合适,若大于1,则需要增加共享池(SHARED-POOL-SIZE)的大小(在初始化参数文件中)。

(2)调整数据字典高速缓存(Dictionary Cache)

数据字典高速缓存包括了有关数据库的结构、用户、实体信息等。数据字典的命中率对系统有很大的影响。命中率的计算中,getmisses 表示失败次数,gets表示成功次数。

查询V$ROWCACHE表:

SQL>SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100

FROM v$rowcache;

如果该值大于90%,说明命中率合适。否则,应增大共享池的大小。 在数据库运行的任何阶段(mount或者open)状态下,都可以手动清除其内容,如下操作:

$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.1.0 - Production on Fri Jun 22 16:53:51 2007

Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

SQL> alter system flush shared_pool;

System altered.

SQL>

可以用Toad8.53的DBA监控工具看到其变化:

图2

(3)调整数据库缓冲区高速缓存

Oracle 在运行期间向数据库高速缓存读写数据,高速缓存命中表示信息已在内存中,高速缓存失败意味着ORACLE必需进行磁盘I/O。保持高速缓存失败率最小的关键是确保高速缓存的大小。初始化参数DB-BLOCK-BUFFERS控制数据库缓冲区高速缓存的大小。可通过查询V$SYSSTAT命中率,以确定是否应当增加DB-BLOCK-BUFFERS的值。

SQL>SELECT name,value

FROM V$SYSSTAT

WHERE name =any ('dbblock gets','consistent gets','physical reads'); 查询结果命中率等于

1-physical reads/(dbblock gets+consistent gets)

如果命中率<0.6~0.7,则应增大DB_BLOCK_BUFFERS。

3 调整磁盘I/O

磁盘I/O是系统性能的瓶颈,解决好磁盘I/O,可明显提高性能。通过查询V$FILESTAT可以知道每个物理文件的使用频率(phyrds表示每个数据文件读的次数,phywrts表示每个数据文件写的次数)

SQL>SELECT name,phyrds,phywrts

FROM v$datafile df,v$filestat fs

WHERE df.file# =fs.file#;

对于使用频率较高的物理文件,可以采用以下策略:

(1)将I/O尽可能平均分配在尽可能多的磁盘上,比如使用Raid5。

(2)为表和索引建立不同的表空间。

(3)将数据文件与重做日志文件以及归档日志文件分别放置在不同的磁盘上。

(4)減少不经过文件系统的磁盘I/O,比如使用裸设备。

比如表空间对应的数据文件的磁盘条带化如下:

#prtconf | grep hdisk

4 调整竞争

当多个进程对相同的资源发出申请时,产生竞争。

(1)修改process参数

该参数定义可以同时连接到oracle数据库的最大进程数,缺省值为50。注意,oracle的后台进程也包括在此数目中,建议将该值改为150至200,目前许多三层架构的应用,其连接数的控制一般有中间件配置,所以,此值不宜过大。

(2)减少调度进程的竞争

减少调度进程的竞争,通过查询v$dispatcher表来判定调度进程的竞争

SQL>SELECT network,sum(busy)/sum(busy)+sum(idle)

FROM v$dispatcher

GROUP BY network;

如果某种协议忙比率超过50%,应增加MTS-DISPATCHERS的值。

(3)减少多线程服务进程竞争

首先查询V$SYSSTAT表判定是否发生多线程服务进程竞争:

SQL>SELECT DECODE(totalq,0,'No request',wait/totalq||'hunderths of seconds')

FROM v$sysstat

WHERE type='common';

如果共享服务进程数量已达到初始化参数文件中MTS_MAX_SERVERS指定的最大值,但应用运行时,平均请求等待时间仍持续增长,那么,应加大MTS_MAX_SERVERS的值。

(4)减少重做日志缓冲区竞争

通过查询V$SYSSTAT表判定redo log 文件缓冲区是否足够。

SQL>SELECT name,value

FROM v$sysstat

WHERE name='redo log space request';

此处value的值应接近于0,否则,应增大初始化参数文件的LOG_BUFFERS的值。

(5)减少回退段竞争

回退段对性能有影响,根据事物大小来分配合适的回退段。

首先判定回退段的数量能否满足系统运行的需要:

查询V$WAITSTAT表与V$SYSSTAT表

SQL>SELECT class,count

FROM v$waitstat

WHERE class

IN ('system undo header','system undo block','undo header','undo block');

SQL>SELECT sum(value)

FROM v$sysstat

WHERE name IN ('db block gets','consistent gets');

如果任何一个class/sum(value)>;10%,那么考虑增加回退段。回退段的数量一般按如下规律设定:

用户数回退段个数

n<16

4

16 32<=n

n/4 但不超过50

(6)减少Free List竞争

当多个进程同时向一个表中插入数据时,产生Free List竞争。

SQL>SELECT class,count

FROM v$waitstat

WHERE class='free list';

SQL>SELECT sum(value)

FROM v$sysstat

WHERE name IN ('db block gets','consistent gets');

如果class/sum(value)>;1%,则应增加该表的Free List 的值。

参考文献:

[1]Rick Greenwald,Robert Stackowiak,Jonathan Stern,著,林琪,谢剑薇,译.Oracle精髓:Oracle9i,Oracle8i & Oracle8(第2版)[M],2002,392.

[2]David C. Kreines,Brian Laskey ,著,张玉英,译,张奕,审校.Oracle数据库管理[M],2003,600.

篇8:影响Oracle数据库系统性能的初始化参数

1 oracle数据库的特点

Oracle数据库起始于20世纪70年代关系型数据库技术。这种数据库的类型的关键是理解数据之间的复杂关系, 然后依据这些关系构造数据库。Oracle数据库将这种关系型的数据库反映到了计算机上。同时他利用多种软件支持通讯协议的配合, oracle数据库在提供了分布式环境的条件下, 能够实现单点更新, 多点查询。

Oracle数据库被很多大型的信息系统采用, 特别是保险石油, 烟草等对安全性要求特别高的行业。其主要的特点表现在:a.可以充分利用硬件设备, 支持大量的用户在同一时间同一数据库上应用, 并且数据争用小, 数据一致性强;b.具有良好的硬件环境独立性, 支持各种类型的计算机系统。c.遵守读取语言、接口、网络通讯协议、操作系统的工业化标准;d.完美的安全性和操控性;e.具有移植性和兼容性, 不仅可以在不同的机器上运行, 而且可以在不同操作系统中运行, 。

2 oracle数据库优化的主要方向

2.1 cpu的利用方面

服务器在cpu利用率达到90%时工作状态达到最高峰。现在一般使用的系统式通过sar—U命令对cpu的使用率进行查看。Oracle中有对cpu使用率、使用时间、使用状态的详细记录。如果oracle数据库使用占据cpu的90%以上时, 说明oracle数据库被正常使用着, 如果没有达到90%, 说明cpu呗其他程序占用过多, oracle就无法使用更多的cpu时间。

对于SQL的重解释有以下来查看解析状况:parse time cpu查看系统的服务时间;parse time elapsed查看响应时间和用户等待时间之差。由此可以得到用户解析的平均等待时间, 这个时间应该接近于零。

对于冲突的问题, 如果没有冲突, 可以通过“latch free”的统计项进行查看;如果冲突过大, 可以降低spin_count参数值进行消除。

2.2 内存分配

Oracle数据库的内存参数调整主要是全局区SGA的调整。可以说SGA是oracle的心脏。它主要分为三个区域, 共享池、数据缓冲区、日志缓冲区域。SGA根据环境的变化而有所不同, 没有最佳的方案, 但是在设置之前, 首先要考虑以下几个问题: (1) SGA要占物理内存的40%到60%之间; (2) 初始化参数一些文件的参数对SGA的大小有着重要的影响; (3) databuffers参数决定着数据库的性能和SGA大小。

3 oracle数据库的性能优化技术

3.1 Sql语句优化

Sql语句优化就是在正确结果的前提下, 用优化器能够识别的语言, 利用索引减少表扫描的次数。其目的在于, 将Sql语言性能低下的转换为相同并且性能优异, 找到最简洁的数据查找路径, 并保持处理器时间和I/O时间平衡。分为以下几个步骤:

3.1.1 将有问题Sql语言找到, 寻找的方法有以下几种:

a.利用oracle中的相关命令进行搜集统计数据;b.通过图形性能工具获得数据库的命中率、CPU利用率、运行内存等的指标信息, 并将它们以表格或者曲线图的形式显示出来。

3.1.2 建立正确合适的Sql语句。

有以下的参照原则是建立索引, 使用索引的目的是为了提高查询效率, 但是并不是索引越多越好, 要做到根据情况, 添加合适的索引;索引不应该与用户表的空间建立在同一个磁盘上;避免会引起spl引擎资源的排序功能的关键词;注意子句的查询顺序。

3.2 oracle内存调整

3.2.1 优化shared pool

共享池的大小合适与否, 主要体现为数据字典的高速缓冲区和库缓冲区的高命中率上。如果库缓冲区设置太小, 会被语言的连续性不断的装入, 将影响系统的性能;如果设置过大, 将会cpu的使用率过大和空间的碎片化。

3.2.2 优化缓冲区

缓冲区内的高速缓存缓冲区的高速缓存越大, oracle数据库能装入的数据就越多, I/O性能越少, 系统性能越好。

3.2.3 重做日志缓冲区的调整

分配给日志缓冲区的空间如果太小, 就会造成没有足够的空间而等待lgwr会频繁的将数据写入磁盘, 增加了I/O的次数, 影响系统的性能。

3.3 oracle数据库的表空间调整

表空间是oracle的重要逻辑概念, 高效的使用表空间, 有利于提高数据库的性能。

表空间的合理分布, 应该将数据和索引分离、归档日志和重演日志分离。将90%以上的操作集中在系统表空间, 索引表空间, 回滚表空间和数据表空间上。并且将这四个表空间都要存储在单独的磁盘上。

表空间优化结构。首先要把系统表空间分离, 避免存放非系统用户, 否则就会增加系统维护的可能性。除了数据字典, 其他能够移出表空间的都要移除;其次是索引段的分离, 索引段不应该和数据段存在同一个表空间之内, 因为他们的数据管理和查询存在冲突。将它们储存在不同的表空间, 可以减少资源争用, 平衡两者负载, 并且可以较少整理数据表和碎片所需的管理成本;再次, 要将临时表空间分离, 临时段是在数据库中动态生成, 是储存排序操作的相关数据。由于他们是动态的, 所以临时段不应该和其他段放在一起储存。一般是将用户的临时段的表空间数据设置在临时表空间。

结束语

综上所述, oracle是现今使用比较广泛的一种数据库, 其安全, 高效, 限制小、存储量大的特点, 使他受到很多行业的青睐。优化oracle数据库, 对于这个系统的运行和操作有重大意义。Oracle的优化可以通过一定的方法, 在cpu应用率和内存分配的几个方面得以实现。希望通过本文为各行业信息化技术在数据库优化方面提供建议。

参考文献

[1]魏彬.ORACLE SQL语句执行效率研究[J].内蒙古科技与经济, 2013 (11) .

[2]王海凤, 张立民.ORACLE中数据库的恢复策略[J].内蒙古工业大学学报 (自然科学版) , 2003 (03) .

[3]王海凤, 张立民.ORACLE中数据库的恢复策略[J].内蒙古工业大学学报 (自然科学版) , 2003 (03) .

[4]张海霞.ORACLE数据库优化设计[J].内蒙古科技与经济, 2007 (14) .

篇9:影响Oracle数据库系统性能的初始化参数

关键词:Oracle数据库;性能优化;措施

中图分类号:TP311.138

随着计算机科学技术的快速发展,数据库能提供的服务水平标志着各国家的科技水平、经济实力和文明程度,是现代信息产业的基本建设工程。数据库技术应用最初应用与传统商务数据处理,后逐渐在多媒体应用、商业管理、计算机图像等领域得到应用。而如何确保数据库的安全、高效运行,则要考虑数据库的性能问题。数据库规模的日益扩大化,越发凸显了数据库系统的性能问题,为使数据库应用系统正常、高效地运行,必须进行数据库优化措施的探讨。

1 Oracle数据库性能影响因素

1.1 CPU 占用过高。CPU是处理软件中数据的中央处理器,任何数据库中的操作都要在CPU中进行指令读取和执行。当有限的CPU资源大量被其它应用占用时,整个系统的反应速度将下降,导致数据库响应迟钝。其中Oracle数据库系统低效SQL语句、中锁冲突都会占用CPU资源,降低系统反应速度。

1.2 操作系统。Oracle数据库的操作系统是其重要组成部分,操作系统很大程度上影响着Oracle数据库服务器的运行性能。操作系统主要问题部分是配置方面问题,需要调整Oracle使用的操作系统资源。

1.3 计算机内存分配不合理。当内存不足时,我们喜欢设置虚拟内存来暂时解决这个问题,但实际上虚拟内存依旧建立在磁盘空间上,不能解决实际问题。因为设有虚拟内存的系统,将交换内存中的信息和这部分磁盘空间,这种频繁的运转方式很大程度上增加了磁盘的读写操作,减少了最近访问数据的缓存空间,从而降低了系统性能。

1.4 网络速度慢。网络反映速度慢对数据库系统的吞吐量也会大幅降低并使用户响应时间延长。

1.5 I/O冲突。I/O冲突很大程度上降低了Oracle数据库系统性能。这是由于在数据库系统中可能发生一个磁盘同时被多个进程同时访问,但一个磁盘一个时间内一次只能被一个进程访问,当发生多个进程同时访问时,磁盘内部很容易产生读写冲突,降低数据库系统反应速度。

2 Oracle数据库性能优化目标

2.1 增加Oracle数据库的吞吐量。Oracle数据库的吞吐量是指在单位时间内,对SQL语句的事务处理量。提高Oracle数据库吞吐量的方法是在同样的资源下提高工作效率,完成更多的任务,或在相同时间内完成更多任务。

2.2 缩短Oracle数据库响应时间。数据库响应时间是指花费在用户从提交SQL语句到获得结果集的第一行数据之间的时间。缩短Oracle数据库响应时间:(1)减少系统服务时间,即通过增加Oracle数据库的吞吐量;(2)减少用户等待时间,即减少用户请求处理时间,也就是同时访问Oracle数据库资源而产生的冲突等,提高系统资源利用率。

2.3 提高Oracle数据库的命中率。内存是否能满足用户对数据的需求,并作出快速响应,这需要在缓冲区进行高速缓存命中率计算来衡量。而在高速缓存中读数据比磁盘中读数据占用更少的内存,因此,提高高速缓存命中率有助于提高响应速度。

2.4 合理使用内存。若存在大量的用户同时访问数据库,当Oracle内存尺寸较小时,很容易造成程序的处理效率低下,使得数据库的响应时间延长。判断是否合理使用内存的指标有使投资得到最大回报、使争用减到最小。只有在合理使用内存的情况下,才能较大程度的提高系统性能。

3 Oracle数据库性能优化措施

3.1 优化数据库。(1)优化数据库设计才能更好的实现Oracle数据库性能最优化,因此,必须设计出一个较好的Oracle数据库方案。而Oracle系统本身己经为数据库的优化提供了若干种技术,但Oracle数据库设计本身还是占据主导地位。(2)在数据库中增加索引,这也是最常见的优化方法。索引(index)是数据库中的常见对象,通过索引可以使表扫描I/O次数大量减少,且不必要的大表全表扫描通通可以避免。设置索引的位置由where子句中索引列规定的查询条件决定。在数据库中增加索引,可大幅度提高查询速度。(3)对数据库中频繁执行的应用逻辑可以通过存储过程完成,且使数据库的操作与代码编程分离,从而实现网络传输量降低的同时数据请求的执行效率也提高。用户发出执行命令即可执行存储过程,不需通过SQL语句提交进行,减少了系统分析SQL语法。(4)对于数据量增长非常快的业务,可以在分区表技术下先进行数据分散,从而使不同表空间在不同的磁盘中得到分布,均衡各硬盘之间的I/O 负载,有效缓解由于过大的数据量而导致的负面影响并降低查询时间。

3.2 优化SQL语句。优化Oracle数据库应用程序,可以通过优化源代码和优化SQL语句两方面。而SQL语句消耗了70%~90%的数据库资源,执行SQL语句的效率将直接影响Oracle数据库的执行效率。通过优化劣质SQL语句,提高内存命中率,加快执行速度,减少I/O访问和网络传输,发挥数据库性能。

(1)对数据库缓冲区的SQL解析信息充分利用。对于一些SQL语句,虽然经常运行,但条件子句变量值不同,则需要对其进行变量绑定,更改为统一的变量。(2)调整SQL的关键语句,最优化数据库寻找数据路径。对一些动态SQL要限制使用,并优化操作符,如尽量少用in或not in,like,union等操作符。(3)优化SQL语句的索引。如索引列采取is null 和is not null语句,如采取函数来处理字段,如采取显式或隐式的运算,这些都将提高系统处理效率。

3.3 优化Oracle数据库内存分配和磁盘I/O。由一组Oracle后台进程和SGA的一个内存区组成Oracle实例,而数据库系统的性能又很大程度上受SGA使用效率的影响,因此,优化Oracle数据库运行状况需要进行SGA的优化。在信息系统运行过程中,进行Oracle数据库内存分配的优化,且必须在磁盘I/O优化前进行。

Oracle数据库中磁盘I/O操作很大程度上影響其性能,必须优化磁盘I/O。而影响磁盘I/O性能的主要因素是数据块空间的分配管理、磁盘竞争、操作系统性能等。具体优化措施有以下几方面:(1)对I/O 争用较多的往往也是一些经常使用的对象,因此,在独立磁盘上放置一些访问量较大的数据文件,在不同的磁盘上放置同一个表空间的多个数据文件,建立单独的表空间进行索引,且表和索引在不同的表空间放置。(2)用户数据表空间需要单独创建,并在不同磁盘放置用户表空间和系统表空间,排序操作可使用临时表空间,避免在多个表空间内存放数据库碎片。(3)选取廉价磁盘冗余阵列(raid)进行优化。其能对不同类型、访问频率的数据库文件进行自动分离,一定程度降低I/O进程间的竞争,优化Oracle数据库性能。

参考文献:

[1]Edward Whalen,Mitchell Schroeter著,高艳春等译.Oracle性能调整与优化(第一版)[M].北京:人民邮电出版社,2002.

[2]赵大力,靳其兵,赵梅.Oracle数据库优化解决方案[J].计算机应用,2005(03):45-46.

[3]陈建云,林春艳,曾昊川.Oracle应用系统数据库的优化探讨[J].信息安全与技术,2014(12).

[4]熊江红.ORACLE数据库的调优问题分析[J].民营科技,2014(10).

上一篇:原来我没懂初三作文500字下一篇:全季店长绩效考核