ORACLE性能优化(精选11篇)
ORACLE性能优化 第1篇
表格是关系型数据库的基础, 数据库中的所有信息都是以表格的形式来存放的。由于Oracle数据库是一个大型的数据库, 存储着大量的数据信息。它使用一个内置的优化器来决定检索数据的最快方法。在Oracle的性能优化中, 适当的建立索引是很关键的。
(1) 低选中率的列建立位映射索引:为那些唯一度很低的列创建位映射索引, 位映射索引能够极大地帮助改善读性能。位映射索引所创建的是包含每个特定关键字0、1值的二进制位映射流。由于这里需要的是位级二进制算术运算, 因此大量的行可以被高速地处理。此外, 位映射索引所占用的空间仅仅是常规B*树索引空间开销的一小部分。同时, 只有在事实/维集合中创建了位映射索引的情况下, 才能使用新的STAR_TRA NSFORMATION访问路径。
(2) 为不平衡的B*树索引创建反转关键字索引:反向键索引是一种B*树索引。在这种索引方式中, 关键字值的字节是按照相反的顺序存储的。通过将关键字反向, 可以使得索引在B*树上更为均匀的分布, 这对于OPS (Oracle并行服务器) 环境非常有用。在这种情况下, 对相同叶节点块的竞争将会导致实例间“ping”动作的发生。针对叶节点块的竞争使用或叶节点块的不均匀密度问题, 主要应该使用反向键索引。
要建立合适的索引, 还必须考察select和where子句, 因为这是查询优化的首要焦点。当索引包括多列时, 就构成了复合索引。此时, 进行查询时会对索引的顺序十分敏感。例如, 在zgda表上创建一个复合索引 (dm, xm) 。查询语句为:
而下面的查询不会采用此索引
这在Oracle中称为“前部说明方式”, 即只有当where条件中的列在复合索引列的前部时, 索引才会被查询优化采用。使用索引可以提高检索数据的效率, 但并不是说只要有索引, 检索的效率就会提高, 添加索引是以增大存储量和降低插入性能为代价的。这里存在着“百分之二十”的规则, 当从表格中选取的行超过总行数的百分之二十时, 表上的索引不会提高检索的速度, 因此在创建索引时要考虑到这一点。不合适的索引将会导致查询性能的严重降低, 应在SQL语句中将这索引隐藏。
2 优化SQL语句
SQL是一种非过程化语言, 它一次处理的是一个记录集合, 对数据提供自动导航。SQL允许用户在高层的数据结构上工作, 而不是对单个记录进行操作。SQL不要求用户指定对数据的存取方法, 而是使用查询优化器, 由系统决定对指定数据存取的最快速手段。当关系数据库的设计者在关系表上定义了索引之后, 系统会自动地利用索引进行快速检索, 用户不需知道表上是否有索引以及表有什么类型的索引等细节。
在SQL语句中, 应注意以下几点: (1) 在where子句中, 若使用and条件, 应将最有可能导致查询失败的条件放前面;若使用or条件, 应将最有可能致查询失败的条件放在后面; (2) 进行多表查询时, 应将返回行少的表放在from子句的后面, 在where子句中, 应将记录多的表的字段写在左边。值得注意的是, 对那些写得不好的小SQL语句进行优化更为重要, 因为这些小的SQL语句每天可能被访问成千上万次。
3 碎片问题
碎片是由于同一磁盘的各个部分分散在磁盘的不同区域产生的。在删除磁盘上的文件和添加新文件时会产生碎片。碎片的大量存在减慢了磁盘访问的速度, 并降低了磁盘操作的综合性能。为了预防碎片, Oracle提供两类表空间: (1) 字典管理的表空间。在这种方式下, 扩展管理是通过数据字典完成的。这是一种常规的和缺省的表空间类型; (2) 本地管理的表空间, 扩展管理是表空间自身完成。一旦选择了一个指定的类型, 就不能更改。在OLTP环境中, 碎片是索引的祸根。Oracle提供了两种方法来消除现存索引中的碎片:联机重建 (Rebuild) 和内置合并 (Coalesce) 。通过联机重建机制, 索引可以完全地重建, 这样就能恢复空间并且重新定位它。Rebuild可以重新将一个索引定位到另一个表空间中。Coalesce并不要求大量的磁盘空间, 因为它在相同的索引内操作。它基本上是合并那些有相同分枝的叶节点。换句话说, 它合并那些在过去分离的叶节点块。它释放叶节点块以备将来使用。
4 调整系统参数
每次在数据服务器上启动数据库系统时, 就会在内存分配一个系统全局区 (System Global Area) , 简称SGA。系统全局区用于存放系统信息, 所有的用户进程和服务进程都可以访问这个内存结构。由于内存读取数据比磁盘读取要快得多, 所以调整SGA参数, 可使Oracle发挥最大效能。如果SGA太小, 就无法高效地完成Oracle中的操作, 如果SGA太大, 操作系统就可能没有足够的内存高效地完成计算机所必须的操作。在Init ora中通过调整DB_BLOCK_BUFFER和LOG_BUFFER的值, 来改变SGA的值。SGA的值占整个内存的50%左右较为理想。在Oracle数据库中有很多参数的设置是来定义物理存储、资源利用的, 这些参数设置得是否合适也就与系统的效率直接有关, 参数的调整实际上就是要调整资源的利用效率, 其中对O-racle性能影响最大的是以下两组参数。
(1) SHARED_POOL_SIZE:共享池的大小, 保持一个高的高速缓存命中率对于数据库性能是非常重要的。如果高速缓存的命中率过低, 那么就需要调整SHARED_POOL_SIZE的大小来提高命中率。可以用如下命令来查看是否需要调整这个参数:
如果得出的结果大于1, 那么就需要调整这个参数。
(2) DB_BLOCK_SIZE:DB_BLOCK_SIZE是Oracle内存块的大小。一般来说, 这个值越大, 对数据库性能越有利。它的取值范围一般为2KB, 此值最好在数据库建立之前就确定好。一旦数据库建立, 改变这个值就比较麻烦, 对大型的数据库尤其如此。
在运行时, 导致程序失败的最常见的原因之一就是程序段的不可生长。这种不可生长可能是由于表空间中没有足够的空间来容纳段的生长, 也可能是到达了MAXEXTENTS。到达MAXEXTENTS可能会造成大量的浪费, 并且它不容易引起人们的注意, 操作者可以考虑将MAXEXTENTS的值设置的尽可能大。从Oracle7开始, MAXEXTENTS对DB_BLOCK_SIZE的依赖性就被取消, 从而使得MAXEXTENTS可以按照需要进行设置, 甚至可以将它设置为UNLIMITED。如果使用的是MAXEX-TENTS, Oracle将自动地把MAXEXTENTS设置为249000000。通过此设置, 就能够有效地阻止段由于到达扩展段的最大值而使应用程序因为不能接受更多数据而导致失败。
5 结束语
Oracle作为一个流行的大型关系型数据库, 在越来越多的系统中得到应用, 如果在实际应用中根据系统的实际情况, 选择合理的优化调整策略, 必定能够充分地利用Oracle提供的高性能服务、各种系统资源, 取得满意的应用效果。
摘要:作为一种大型数据库, Oracle能广泛应用于金融、邮电、电力、民航等国民经济重要部门。其设计的结构提供了完整、简单的操作及可靠度相当高的数据备份和恢复机制 (backup and recovery) 。对于数据库管理员来讲, 如何提高数据库性能, 显得尤为重要。
ORACLE性能优化 第2篇
分区
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列进行分区。
当分区中出现许多事务并且要保证所有分区中的数据记录的惟一性时采用全局索引,在建立全局索引时,Global子句允许指定索引的范围值,这个范围值可以不同于表分区的范围值,
只有建立局部索引才会使索引分区与表分区间建立起一一对应关系。因此,在大多数情况下,应该使用局部索引分区。若使用了此索引,分区就能够很容易地将索引分区与表分区建立关联,局部索引比全局索引更易于管理。
[next]3. 分区管理
重建索引
如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,只是因为索引中无效空间会增加。
段的碎片整理
一个段是由范围组成,而范围是由相邻的Oracle块组成。一旦存在的范围不能再存储新的数据,这个段就会去获得新的范围,但并不要求这些范围是彼此相邻的。这样的扩展会一直继续下去,直到表空间中的数据文件不能提供更多的自由空间,或者范围数量已达到极限。
若一个段的碎片过多,可用两种方法解决:
1. 用正确的存储参数建立一个新表,将旧表中的数据插入到新表中,再删除旧表;
2. 利用Export/Import工具。
ORACLE性能优化 第3篇
关键词:信息系统;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-),男,江苏靖江人,科员,本科,研究方向:信息系统管理维护。
Oracle数据库性能优化分析 第4篇
1 SQL语句的优化
SQL语句的执行效率是影响Oracle数据库执行效率的一个重要因素, 通过对SQL语句的优化调整, 能很好地提高数据库系统性能。
1.1 选择合适的联合次序
当SQL语句包含多个表联结时, 表的联结次序是非常重要的。在联结中, 驱动表示紧跟在WHERE子句后面的第一个表, 该表包含能够去除大多数行的过滤器, 选择的联结次序应该让最少数目的行参加到与其他表的联结中。
1.2 有效的WHERE子句
WHERE子句中的选择性条件可以显著减少SQL语句在一个查询周期内得到的数据量, 所以在构建WHERE子句时, 遵循一些原则可以提高语句的执行效率:
1.2.1 尽可能少的使用通配符
如果在WHERE子句中有通配符, 则需要对整个数据列进行模式匹配来检索数据, 即数据库只能跳过索引并进行一次全表扫描。
1.2.2 使用WHERE语句代替HAVE语句
WHERE子句在一开始就限制了被检索的行数, 而HAVE子句则需要检索比需要的还要多的数据, 会加重求和和排序的负担。
1.2.3 执行有效的子查询
如果子查询有选择的WHERE子句, 最好使用“IN子句”;如果父查询中包括选择性的WHERE子句, 最好使用“EXISTS子句”。
1.3 高效的索引策略
索引是对一个表遍历的快速方法, 它只需要查找必要的数据行, 而不需要进行全表扫描。如果在一个表中强调行的唯一性, 则可以对这个表使用主索引, 作为主索引的列必须是非空的和唯一的。除了主索引外, 还可以定义几个次索引, 附加的次索引将会增强SQL语句的查询性能。
2 Oracle内存调整
2.1 共享池的调整优化
共享池主要由库告诉缓冲和数据字典告诉缓存两个区域组成。库高速缓存用于保存SQL和PL/SQL代码及其分析、执行计划等信息, Oracle处理SQL语句时, 会创建分析树, 对其进行句法和语义的分析, 并检查对象权限;然后对SQL进行优化, 生成执行计划。分析树和执行计划将在语句第一次执行前存储在库高速缓存中, 将来处理相同语句时, 仅需要在库高速缓存中找到相应的语句分析树和执行计划, 直接执行语句即可, 提高了系统的响应速度。数据字典高速缓存主要用于保存数据库对象信息及用户权限等信息。共享池大小是否合适, 主要体现在库缓冲区和数据字典告诉缓冲区的命中率上, 库缓存命中率应该高于99%, 而数据字段缓存命中率应达到95%~99%, 为了提高命中率, 需要增加实例的共享池尺寸。
2.2 缓冲区高速缓存的调整优化
在用户首次请求数据时, Oracle从磁盘读取数据并存放于缓存区高速缓存中, 然后再从数据缓冲区中将数据返回给用户。当用户再次请求时, 如果数据在数据缓冲区中, 则从其中将数据直接返回给用户, 降低了查询时间。在数据库运行中, 保证在缓冲区中存有尽量多的用户请求的数据, 减少从磁盘读取数据的次数, 可以大大提高数据的操作性能。缓冲区告诉缓存越大, 磁盘的I/O就越少, 系统的性能就越好。数据库缓冲区大小是否合适, 主要体现在数据缓冲区命中率上, 数据命中率应在90%以上, 否则就需要分配更多的数据缓冲区。
2.3 PGA内存的调整优化
PGA是Oracle在启动一个服务器进程时创建的非共享内存区, 他主要用于内存密集型任务, 比如GROUP BY, ORDER BY及散列联结等。通过调整PGA_AGGREGATE_TARGET参数, 设置内存限额, 来控制数据库中排序和散列操作的效果。如果PGA_AGGREGATE_TARGET参数过低, 可供排序等操作的内存过小, 排序数据将在临时表空间中进行, 此时就需要对磁盘进行I/O操作, 数据库的响应时间将会延长。因此, 如果需要执行高效的排序或散列操作, 该参数需要设置为较高水平。PGA_AGGREGATE_TARGET参数的一个重要指标是PGA的命中率, 通常情况效, 改数值应该高于95%, 即保证绝大多数的排序操作在内存中进行。
3 磁盘I/O的调整
磁盘的I/O速度对整个Oracle数据库的性能有深刻的影响, 如果系统中存在严重的I/O竞争, 就需要对磁盘I/O进行有效的调整优化:
(1) 分散数据库文件和重做日志文件, 避免他们之间的磁盘竞争, 还可以达到均衡磁盘负载的目的。
(2) 使用Oracle分区技术将较大的表数据分散到不同的数据文件中。良好的分区可以讲数据传输对磁盘I/O竞争均匀地分散开, 避免了查询时的全表扫描, 提高系统的I/O性能。
(3) 索引的优化设计。利用索引行记录定位, 减少磁盘的I/O, 从而达到加快数据库访问速度, 提高系统性能的目的
4 结论
在日常应用中, 数据库的性能变差往往是几个问题共同作用导致的, 需要数据库管理员根据实际情况, 全面分析以上提到的各个方面, 对各种优化手段综合应用, 才能对Oracle数据库进行有效调整, 从根本上提高数据库的使用效率, 获得系统的最优性能。
摘要:Oracle数据库是目前电力信息系统应用在为广泛的大型关系型数据库之一, 成几何级数增长的数据可能会导致数据库性能的下降, 本文从SQL语句的优化、内存的调整、磁盘I/O的调整三方面阐述数据库优化方案, 针对电力大型业务系统数据库优化方案的综合应用, 可以保证系统的高效运行。
ORACLE性能优化 第5篇
具体影响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
ORACLE性能优化 第6篇
关键词:Oracle数据库,智能优化器,性能优化
0 引言
数据库性能的优化调整是一项复杂而艰苦的工作, 一个高性能的系统优化调整将从系统设计阶段开始贯穿于系统的整个生存期。就Oracle数据库而言, 优化与性能调整的主要内容包括:Oracle服务器性能的调整、SQL语句的优化与调整以及操作系统参数的调整。
1 Oracle服务器性能调整
1.1 性能调整的目标
数据库性能问题常表现在系统吞吐量降低或用户响应时间变慢。性能优化的主要目的就是提高数据库的吞吐量和降低数据库的响应时间。数据库性能优化的基本原则是通过尽可能少的磁盘访问获得所需要的数据。
1.2 系统性能的问题
问题主要是: (1) 良好设计的现有系统的调整因素; (2) 不足的CPU; (3) 不足的内存; (4) 不足的I/O; (5) 网络约束; (6) 软件约束。
在考虑调整良好设计的现有系统时, Oracle系统性能包括许多因素, 其中有网络、CPU、内存、软件、I/O等, 性能问题是相互联系。表1中就列出大部分的系统性能问题的区域。
1.3 性能调整的方法
调整Oracle数据库方法按照从设计和开发阶段到实例调整的顺序进行, 性能中竞争最大的步骤在最前面。以下是基本步骤 (前面的步骤作的决定可能会影响后面的步骤) : (1) 调整业务规则。这关系到整个系统的深层次分析和设计, 比如配置问题; (2) 调整数据设计。数据库设计过程需要进行标准化, 分析数据确保没有保存多余的数据; (3) 调整应用程序设计。需要将设计目标转化为有效的系统设计; (4) 调整数据库的逻辑结构。在数据设计中决定主键和外键索引, 逻辑结构设计阶段可以建立支持应用程序的额外索引; (5) 调整数据库操作。根据应用程序的需要可以使用以下特性和技术:数据处理、Oracle优化器、行级锁管理器、PL/SQL; (6) 调整访问路径。为确保高效地访问数据, 可以考虑使用聚集、散列聚集、B*-树索引和位图索引; (7) 调整内存分配。Oracle的共享内存动态分配给数据字典高速缓存、库高速缓存、上下文区域、缓冲区高速缓存、日志缓冲区、序列高速缓存; (8) 调整I/O和物理结构; (9) 调整资源竞争。多用户的并发操作可能造成Oracle资源竞争; (10) 调整基础平台。可以查看有关平台指定的Oracle文档, 研究调整基础系统的方法。
在完成这些步骤后, 重新评测数据库性能, 决定是否需要进一步调整。该性能调整方法是一个反复的过程。
1.4 诊断工具
诊断工具为: (1) Oracle和简单网络管理协议 (SNMP) 支持; (2) EXPLAN PLAN SQL查询语句; (3) 支持脚本; (4) 应用程序注册; (5) 企业管理器 (Enterprise Manager) 。
2 SQL语句的优化
结构化查询语言 (SQL) 用于执行所有数据库操作, 而有些Oracle工具和应用程序可以简化SQL语句。以下介绍常见的SQL语句操作以及技巧。
2.1 一般的SQL技巧
建议不用“*”来代替所有列名;用TRUNCATE代替DELETE;在确保完整性的情况下多用COMMIT语句;尽量减少表的查询次数;用NOT EXISTS替代NOT IN;用EXISTS替代IN;用EXISTS替代DISTINCT。
2.2 表顺序的选择
选择FROM表的顺序;驱动表的选择;WHERE子句的连接顺序。
2.3 有效使用索引
2.3.1 适当时使用索引
在利用索引的情况下, 由于只从表中选择部分行, 所以能够提高查询速度。对于只从总行数中查询2%~4%的表, 可以考虑创建索引。
2.3.2 索引列和表达式的选择
创建索引时选择索引列的原则如下: (1) WHERE从句频繁使用的关键字; (2) SQL语句中频繁用于进行表连接的关键字; (3) 重复性少的关键字; (4) 对取值少的关键字和表达式, 尽量考虑位图索引; (5) 不要将频繁修改的列作为索引列; (6) 尽量不要使用包含操作符或者函数的WHERE从句中关键字作为索引列; (7) 如大量使用并发INSERT、UPDATE及DELETE语句访问父表或子表, 考虑使用完整性约束的外部键作为索引; (8) 在选择索引列时, 还要考虑该索引引起的INSERT、UPDATE及DELETE操作是否值得。
2.3.3 选择复合索引主列
复合索引即多列索引, 有时比单列索引有更好的性能。如在建立索引采取多列作为索引, 主列是最先被选择的列。
2.3.4 避免对大表的全面扫描
在应用程序设计中, 除必要情况, 应该尽量避免对大表进行全表扫描。
2.3.5 监视索引选择使用
除了主键是完整性约束而自动变为索引外, 创建普通索引的目的就是为了提高查询速度。Oracle10g版本中, 用户可以对索引进行监视, 来避免索引建立而无用造成的性能滞缓。
3 用智能优化器 (Optimizer) 提高Oracle的性能
3.1 优化器执行计划机制
优化就是选择最有效的方法来执行SQL语句, 是任何数据控制语言 (DML) 语句过程中一个重要步骤。Oracle优化器 (Optimizer) 选择它认为最有效的方法。通过理解Oracle内部产生执行计划的机制, 你能够控制Oracle花费在评估连接顺序的时间数量, 并且能在大体上提高查询性能。
3.2 优化器的优化方式
Oracle的优化器共有两种优化方式, 即基于规则的优化方式 (RBO) 和基于代价的优化方式 (CBO) 。
RBO方式:优化器在分析SQL语句时所遵循的是Oracle内部预订的一些规则。
CBO方式:基于语句的代价包括CPU和内存。优化器在判断是否用这种方式时, 主要参照是表及索引的统计信息。
3.3 智能优化过程
3.3.1 预备执行SQL语句
当SQL语句进入Oracle的库缓存后, 在该语句预备执行之前, 将执行下列步骤: (1) 语法检查:检查SQL语句拼写是否正确和词序; (2) 语义分析:核实所有的与数据字典不一致的表和列的名字; (3) 轮廓存储检查:检查数据字典, 以确定该SQL语句的轮廓是否已经存在; (4) 生成执行计划:使用基于成本的优化规则和数据字典中的统计表来决定最佳执行计划; (5) 建立二进制代码:基于执行计划, Oracle生成二进制执行代码。
3.3.2 优化执行
一旦为执行预备好了SQL语句, 以后的执行将很快发生, 因为Oracle认可同一个SQL语句, 并且重用那些语句的执行。在SQL语句的预备过程中, 花费最多的步骤是生成执行计划, 特别是处理有多个表连接的查询。当Oracle评估表的连接顺序时, 它必须考虑到表之间所有可能的连接。当一个查询中含有超过10个表的连接时, 排列的问题将变得更为显著。对于15个表之间的连接, 需要评估的可能查询排列将超过1万亿种。这时需要使用optimizer_search_limit参数来设定限制。通过使用optimizer_search_limit参数, 你能够指定被优化器用来评估的最大的连接组合数量。使用这个参数, 我们将能够防止优化器消耗不定数量的时间来评估所有可能的连接组合。假如在查询中表的数目小于optimizer_search_limit的值, 优化器将检查所有可能的连接组合。optimizer_search_limit参数也控制着调用带星号的连接提示的阀值。当查询中的表的数目比optimizer_search_limit小时, 带星号的提示将被优先考虑。
4 结束语
SQL的优化很大程度与数据库开发人员和应用程序开发人员能否写出高效的SQL语句有关。许多性能问题往往与SQL效率低下有关。
实际优化过程中, 应用程序设计者比优化器拥有更多信息, 并可以选择更高效的方法执行SQL语句, 不能一味依赖O-racle优化器。
实际上, 伴随着开发设计人员素质的提高, 编程语句规范性的加强, 如今的优化己经向优化等待 (waits) 转型了, 实际中性能优化最根本的出现点也都集中在IO, 也成为影响性能最主要的方面。为了迅速发现Oracle Server的性能问题的成因, 我们可以求助于v$session_wait这个视图, 看系统的这些session在等什么, 使用了多少的IO。
参考文献
[1]张晓林, 侯宝稳, 吴宝江.数据库系统管理与应用[M].北京:清华大学出版社, 2007.
[2]王彬, 周士贵.Oracle11g基础与提高[M].北京:电子工业出版社, 2008.
[3]藤永昌.Oracle9I数据库管理员大全[M].北京:清华大学出版社, 2004.
ORACLE性能优化 第7篇
1 影响Oracle性能的因素
Oracle系统性能受到数据库运行的诸多方面的影响与制约, 包括数据库及其配置、操作系统、设计、应用程序。
1.1 数据库及其配置
数据库是整个系统的核心, 它的性能直接影响到整个系统的性能。如果对数据库系统的选用和数据库系统的配置不恰当的话, 对系统的设计到最终的使用都是一种灾难, 所以务必做好详细的规划。
1.2 操作系统
操作系统不是数据库, 但是数据库的基础, 作为数据库运行的平台, 在性能或多或少会对整个系统造成影响, 尤其是在安全性方面。
1.3 设计
应用程序的设计是整个系统的灵魂, 一个好的设计对系统性能会有很大帮助, 而一个欠佳的设计最佳的修改时期就是在设计时期, 越晚修改付出的代价也就越大。
1.4 应用程序
应用程序中SQL语句的编写、数据库连接方式的选择、数据库端程序设计以及数据库对象的使用情况等, 都影响系统的执行效率。
以上几方面影响性能的比例据统计分别依次占:17.5%、2.5%、20%、60%。
2 Oracle性能调整的目标
即使是在系统维护阶段, 也需要建立数据库性能的目标, 通过对比才能知道何时需要做出调整, 调整的方法从当时设计系统时是如何考虑的出发, 进行操作系统的硬件或软件的调整, 确定问题原因, 采取有效措施。
当进行系统设计时, 制定专门的目标。当检测到使用过程中系统不能满足此目标了, 查找问题原因, 采取纠正措施。在开发期间, 应在实际环境中测试应用, 确定在采取应用之前是否满足设计的性能目标。当正在维护系统时, 可以用Oracle工具 (例如A W R、A D D M) 来监视数据库运行的状态。无论如何, 调整通常是一系列开销。一旦找到, 可能会要牺牲一些其它方面的指标来达到所要的结果。例如, 如果I/O竞争太大, 可能需要更多内存或磁盘。如果不可能添加设备的话, 可能就需要限制系统的并发或连接数, 以得到所需要的性能。当面对如何进行各方面的取舍时, 你必需要明白:哪些方面是最重要, 那就可以用其它方面来换取这一方面的性能。随着应用的规模越来越庞大, 全面的调整应用逐渐变成代价高昂的行为, 在这情况下, 要取得最大的效率/投入之比, 较好的办法是调整应用的关键部分, 使其达到比较高的性能, 这样从总体上来说, 整个系统的性能也是比较高的。这也就是有名的20/80原则, 调整应用的20% (关键部分) , 能解决80%的问题。
3 数据库性能的优化
3.1 明确哪些是要和计算机交互的资源
在计算机中磁盘I/O, 内存, CPU、网络和Process是与数据库打交道最多的资源了, 如何合理分配利用这些资源, 并且需要充分考虑到几种资源不同的延时, 就对数据库的性能有很大的影响了。
磁盘I/O是这几种资源中最耗时间的, 因为磁盘是机械的设备, 延时比较大, 而硬盘的转速在一定时期内想再提高是比较难的, 所以只能是从并行性考虑此问题, 如何提高I/O的并行涉及Oracle数据库系统存取的原理, 需要理解清楚在进行数据库操作时什么条件下会引起磁盘的读写, 有了这些知识就可以在这个基础上进行优化了。
如何合理使用计算机内存也会对数据库的性能造成较大的影响, Oracle数据库中最为主要的内存区域是SGA (System Global Area) , 所有的数据库线程、共享池以及缓存区都使用这一块区域, 所以如果分配太少内存给这块区域使用, 就会大大降低数据库的整体性能, 但如果分配得太多内存, 就会限制了操作系统性能, 因此在分配SGA的大小一般占主机内存的一半。
在CPU、网络和Process方面对数据库的影响较以上两方面小, 在服务器中C P U的数量越来越多, 线程数也越来越大, 在C P U处理能力上的瓶颈的情况也较少出现, 而网络的瓶颈一般出现在C/S架构上, 如果在设计之初没有定好网络流量的目标, 数据库操作的语句没有规划好写在客户端还是服务器上, 当数据库访问量变大后, 对网络的流量压力将会突显, 因此一般大的SQL语句或操作建议放在服务器端以存储过程形式来运行。另外, 因为Oracle连接模式有专用模式和共享模式之分, 所以采取共享模式来连接数据库可以达到节省一部分服务器资源的目标, 但是Oracle的共享模式不是非常完善, 而且在很多操作时需要用到专用模式连接, 因此往往很少会使用共享模式来连接数据库, 而使用专用模式连接+连接共享池 (中间层来提供) 的模式设计系统。
3.2 针对磁盘I/O调整原则
首先要建立贯穿整个应用的设计思想:最小化I/O的访问。主要的方法以下几点。
均衡各类文件 (控制文件、数据文件、日志文件、归档文件和临时文件) 的分布。
(1) 控制文件:单独存放, 镜像不要过多, 2份足以。
(2) 日志文件单独存放, 不要放在R A I D 5上, M E M B E R不要过多, 2份足以。
(3) UNDO文件单独存放。
(4) 数据文件尽可能的要分散, 尤其是分区表和分区索引所存储的数据文件。
(5) 临时文件单独存放, 不同的用户使用不同的临时表空间, 最好能使用临时表空间组。
(6) 索引和数据文件分离, 对I/O影响不大, 便于管理 (根据索引的原理ROWID) 。
(7) 归档文件和所有其他文件分离, 更务必和日志文件绝对分离。
4 结语
Oracle数据库系统性能优化与调整是一个复杂、繁琐的系统工程, 贯穿于数据库系统开发的整个过程。本文就磁盘I/O的优化和调整进行研究, 但数据库系统的优化和调整还包括内存结构调整、磁盘碎片调整以及CPU性能调整等, 应该充分利用各种性能优化与调整策略进行反复的调整, 以获得系统的最优性能。
参考文献
[1]甄福东.Oracle 10g数据库系统性能优化与调整[J].电脑知识与技术, 2010.
[2]韩云波, 宋莉.Oracle性能调整技术研究[J].电脑知识与技术, 2010.
[3]徐玉金.sql性能的调整-总结.2005.
ORACLE性能优化 第8篇
随着国民经济的快速发展以及计算机通信技术水平的不断提高, 互联网技术被越来越广泛地应用到电信、金融、证券、商务等社会的各个基础行业中, 同时也催生并且推动了电子商务业务以及网络应用的不断向前发展, 导致了网络设备中的数据库服务器的数据存储量以及访问量不断增大, 如果不采取必要的措施而是放任这种现象继续发展, 由于数据库服务器有限的系统资源以及数据传输速度, 那么网络用户在发送请求之后将会等待很久的时间才会得到相应回复, 从而给网络用户带来极差的用户体验, 同时也会限制网络应用以及网络商务业务的开发与进展, 所以必须采取必要的措施, 对数据库服务器的数据管理系统进行性能调优, 从而提高服务器对网络用户的响应速度以及服务质量, 将有限的计算机系统资源服务于更多的网络用户。Oracle数据库系统是甲骨文公司开发的一套以分布式数据库为核心的数据管理系统, 它采取了很多合理有效的措施来优化数据库服务器的整体性能, 带来了极佳的用户体验, 已经作为全球第一大数据库管理系统被广泛应用到各个领域中, 所以我们来研究一下Oracle采取何种措施才优化数据库服务器的整体性能的。
2 Oracle数据库的性能优化
Oracle数据库性能优化是指通过合理有效地数据管理策略来对数据库服务器的CPU、内存、磁盘空间等计算机硬件资源进行管理以及通过有效和调整策略来对磁盘I/O管理机制、系统运行参数、应用程序SQL语句分析与设计、网络传输性能等数据结构或者系统参数等计算机软件资源进行设计和调整, 从而实现Oracle数据库管理系统高吞吐量、低响应时间地应对用户的网络请求, 为其提供一个良好舒适的网络环境。所以Oracle数据库管理系统采用优异的策略来对数据库服务器的硬件资源进行合理分配以及对软件结构和参数进行优化调整, 从而实现了Oracle数据库的优异性能。
2.1 管理硬件资源
Oracle对数据库服务器硬件资源的管理主要包括计算机CPU、内存以及磁盘I/O等系统资源的管理, 通过有效的管理策略, 来实现对计算机硬件资源的合理分配和使用, 从而提高服务器系统硬件资源利用率, 使Oracle对数据存储以及处理的过程最优化。
对于计算机来说, CPU被充分利用是指让CPU一直工作在高利用率的状态下, 一般指90%以上, 对于数据库服务器而言, CPU能够及时并快速相应数据管理系统的数据操作请求才能够是数据库有高的响应速度。Oracle根据不同的业务需求设定不同的CPU使用优先级和占有率, 从而使得数据库管理系统可以根据不同应用程序或者用户会话动作来选定使用优先级和利用率, 从而需要快速响应的请求能够得到较多的CPU资源进而快速响应。
对于数据库服务器内存资源的分配, Oracle数据库根据不同的业务和用户对话需求通过调整内存中共享池的大小来优化数据库系统性能, 通过调整SGA中数据缓冲区CACHE来扩大内存存放数据的容量进而减少磁盘I/O消耗的时间, 通过调整重做日志缓冲区来减少Log的数据写入频率以及通过调整PGA来提升SQL语句事务处理的速度, 从而实现了对数据库服务器内存资源的管理来提高数据库的整体性能。
2.2 压缩存储数据
Oracle数据库采用特殊的压缩机制对存储数据进行压缩, 然后存入磁盘空间中, 当有用户发送请求扫描该数据时, 从磁盘到内存传输的数据是被压缩的数据, 从而减少了磁盘I/O上传输的数据量, 进而减少了磁盘I/O上数据传输的时间, 提高数据库对事务请求的响应时间, 增加I/O的吞吐量。Oracle数据库中常见的压缩机制为常规压缩机制, 针对不同性质的数据采用同一种压缩方式。现阶段甲骨文公司开发的Oracle Exadata数据库机中的数据库管理系统采用的压缩机制除常规压缩之外, 还有混合列式压缩中的拥有不同压缩比例和遍历速度的四种压缩机制, 对于不同性质的数据采用不同方式的压缩, 使得Oracle对数据压缩的选择方式更灵活, 进一步提升了Oracle数据库的数据传输性能。
2.3 优化SQL语句
由于对于数据库内数据常有的操作是SQL语句的查询操作, 所以Oracle数据库管理系统对SQL语句查询也采用了优化方式, 来降低SQL语句查询操作的时间, 从而提高用户请求的响应速度。
SQL语句查询操作的优化方案是索引, 也就是Oracle在将存储数据存入磁盘的时候会根据数据的大小建立一个索引目录, 当应用程序发送SQL查询语句请求反馈数据时, Oracle数据库管理系统会根据SQL查询语句的谓语和Oracle数据库管理系统中储备的索引目录进行对比, 从而快速跳过不符合条件的数据存储块, 只在符合要求的数据存储块内与存储数据进行对比, 从而选择出符合SQL语句查询条件的结果数据。整个查询过程, 由于快速跳过不满足条件的数据快, 从而缩短了SQL语句的查询时间, 提高了对应用程序的响应速度。
3 总结
Oracle数据库通过对系统硬件资源CPU、内存以及磁盘I/O的管理与分配, 实现了对优先级别高的事务优先处理的功能, 从而提高紧急事务的响应时间;通过对存储数据进行压缩, 在减少磁盘容量开销的同时, 降低了磁盘I/O上的数据传输时间;通过优化常用SQL语句, 降低数据遍历时间, 提高用户请求响应速度, 从而提高了数据库服务器的整体性能。
参考文献
[1]王祖亮, 郭勇.空间数据库的性能优化探讨[J].测绘技术装备.2010 (01)
ORACLE性能优化 第9篇
计算机网络领域应用较为普遍的信息管理工具就是数据库系统, 而Oracle数据库是应用最为广泛的信息数据管理系统, 为计算机用户带来了极大的便利, 为了达到数据库系统能够有效管理数据信息的目标, 需要不断调整优化Oracle数据库性能, 为其安全稳定运行提高保障, 保证Oracle数据库的持久发展。
1 Oracle数据库简介
1.1 Oracle数据库概述
Oracle数据库功能相当强大, 起源较早, 最开始出现的形式是关系型数据库技术, 可以实现对数据之间的关系的了解, 并通过信息库的构造将这些关系真实的反映出来。1984年Oracle数据库实现了桌面计算机与关系数据库的有效结合, 随着Oracle数据库的不断发展, 其各项功能也不断健全, 并提供给企业类的、网络工作组、高可靠性的、产业化的应用可靠的技术支撑, 实现对关系数据的高效处理[1]。
1.2 Oracle数据库主要特点
Oracle数据库的主要特点有支持多用户和大数据的高性能事务处理、硬件环境独立、对完整性和安全性的良好控制, 同时Oracle数据库还遵守网络通信协议、数据存取语言等相关的工业标准。另外Oracle数据库支持分布式数据库和分布处理, 拥有可连接性、可兼容性、可移植性的特征。实现不同型号的计算机和不同操作系统下可以运行Oracle数据库的需求, 其自身独有的特点满足了不同用户的不同要求, 符合时代发展潮流。
2 Oracle数据库性能调整
2.1调整Oracle数据库内存参数
Oracle数据库内存参数的调整主要是针对其系统全局区进行的。 其主要组成部分有日志缓冲区、数据缓冲区、共享池。系统全局区伴随着环境的变化做出相应改变, 在对其进行调整的过程中要考虑数据库的运行模式、操作系统的内存容量、系统的类型是裸设备还是文件系统、物理内存的大小。系统全局区大约占数据库物理内存的40%-60%, 系统全局区大小直接受初始化参数的决定性影响, 主要参数有WORK AREASIZEPOLICY、LOGBBUFFER、SHARED_POOL_SIZE、DB_CACHE_ SIZE、DB_BLOCK_SIZE。WORKAREASIZEPOLICY参数的有MANUAL和AUTO两种可选值, 可根据实际情况进行选择;LOGBBUFFER能够指定Oracle数据库内存空间的大小, 即写入到重做日志文件中的通过缓冲区写入的重做日志;SHARED_POOL_SIZE对数据库共享内存池其直接决定作用;DB_CACHE_SIZE对默认缓冲池的大小产生决定效用;DB_BLOCK_SIZE对创建数据库每个模块的尺寸产生直接影响。 对这些参数进行调整有利于实现Oracle数据库的内部优化, 为Oracle数据库的稳定运行提供可靠的后台保障[2]。
2.2调整Oracle数据库操作系统资源
运行服务器的操作系统对Oracle数据库服务器产生直接影响, 操作系统的性能若是出现故障, 则无法进行Oracle数据库性能的有效调整。首先, 需要对操作系统的换页空间进行适当的调整, 优化配置其内存分配, 通过数据库的实际运行情况的调查, 相关的管理人员可以调整内在资源, 同时对操作系统的换页空间也要做出相应的调整。在换页空间的大小检查过程中, 当换页空间的物理内存大于2G时, 就需要对其进行适当的调整, 如果物理内存小于2G, 则需要将换页空间的大小设定为物理内存的1.5倍。另外在创建换页空间的时候, 应尽量将换页空间设置在不同的硬盘中, 提高换页空间的性能, 通过smitty mpks增加换页空间或者是利用smitty chps对原有的换页空间的大小进行修改, 以此来调整其性能。其次, 对数据库的硬盘I/O进行调整, 在I/O的设计阶段管理员就应当优化调整其操作方式, 管理员想要实现的系统类型与与I/O设计联系密切, 不同的数据库系统需要不同的I/O设计方案和不同类型的I/O模式。当创建系统之后就需要对系统的内存进行调整, 将磁盘I/O调移, 以此保证磁盘I/O调整工作顺利进行, 简化调整程序, 不必考虑缓冲区命中率过低的问题。对于数据库的性能来说磁盘I/O操作发挥了极大的作用。影响磁盘I/O性能的因素有I/O次数过多和磁盘竞争等, 对其调整时可以将组成同表的数据分置在不同的磁盘中, 使硬盘之间的I/O负载达到均衡。最后是对数据库的核心参数配置进行调整, 通常情况下设置系统核心参数时都会设置较低的参数值, 需要在运行的过程中不断进行调整, 在运行Oracle数据库过程中将Default128增加到500, 调整maxuproc来发挥效用, 保证Oracle数据库的稳定运行。
3 Oracle数据库性能优化
3.1优化Oracle数据库索引
由于索引在用户使用数据库的过程中为用户检索提供了便利, 所以Oracle要优化数据库中的索引, 索引出现问题直接影响Oracle数据库的利用效率, 为用户的数据库使用和查询带来不便。对Oracle数据库索引进行优化主要有两种方式, 第一种是手动优化, 在Oracle数据库中通过手动方法对其索引进行优化主要依靠Oracle数据库的图形性能工具Oracle Enterprise Manager Console, 在相应的Oracle数据库中, 通过用户的登陆权限登陆到指定的索引界面, 找出SYAPP数据库中的位于索引区里的XTWHZDBMB_X功能菜单, 点击鼠标右键选择功能菜单中的“移去”选项, 将不正确的索引选中并删除, 或者将不符合数据库实际信息内容的索引进行修改, 及时更新数据库的索引列表。第二种索引优化的方法是命令行方法, 根据Oracle数据库提供的相关SQL环境, 利用特有的命令语句, 在索引命令设置时输入DROP INDEX XTWHZDBMB_X命令语句, 利用该命令执行删除不必要索引的的指令, 或者输入其他的命令将索引进行索引替换、更新命令执行语句, 对Oracle数据库的索引进行优化。通过这两种方式实现Oracle数据库索引的优化, 从而保证Oracle数据库的安全运行, 为用户数据利用和检索查询带来便利。
3.2优化Oracle数据库内存
对Oracle数据库的内存进行优化主要是在SGA调整的基础上进行优化, 在使用Oracle数据库过程中不断检查, 首先, 对共享池优化, 对其优化的原因是它能够高速缓存PL/SQL、SQL语句, 通过最少算法进行管理的功能程序, 当共享池内的SQL语句超出额定值之后, 该算法则除掉不常使用或很少访问的语句, 为新的SQL语句提供更多的空间。使用共享池的这项功能可以实现Oracle数据库将用户常用和流行的PL/SQL、SQL语句保存在数据库中, 逐步将不常用的语句更新换代, 优化Oracle数据库的内存, 得到最新的信息, 以此来适应用户对数据库不同的需求。其次, 是对缓冲区高速缓冲存储器进行优化工作, 实现用户对自己的PL/SQL和SQL语句缓存版本的检索, 还可以查找到请求的相关数据。充分发挥缓冲区高速缓冲存储器的作用。用户在使用的过程中常用LRU列表进行管理, 用户对应用程序的访问模块大多存放在最近使用端, 通过全表扫描对对常访问的表进行优化检查, 当发现常用表较小的时候, 就有很能全表扫描对该表进行访问。但当全表扫描在LRU列表的最少使用端放置该表的缓冲区, 这些该缓冲区就容易被移走, 只有程序用户重新利用的时候, 才会在内存中看到, 解决这一问题, 采取的优化方式就是在全表扫描的过程中, 将缓冲区存储在LUR列表的最多使用端, 利用这种方式可以将内存中的缓冲区留存的时间更久, 便于用户对其进行有效访问。提高Oracle数据库的利用效率。
3.3优化Oracle数据库分区
Oracle数据库引用分区技术有效的解决了大索引、大表的可用性和相关性能的问题, 通过对其拆分, 在对操作资源的请求上进行限制, 分区变小就会加快系统的访问速度, 提高系统效率。Oracle数据库的分区技术还可以有效的解决信息资源管理数据库的其他检索和相关表的使用问题, 对Oracle数据库分区进行优化同时可以实现对其他性能的优化。Oracle数据库虽然拥有分区技术, 但在实际应用中仍存在缺陷, Oracle数据库中已有的普通表无法实现直接修改属性转换为分区表, 只有通过重建的方法才能进行转换, 但是信息资源数据管理系统适用的时间较长, 一旦投入使用其各项性能设计都已经定型, 很难通过重建对普通表进行分区表转换。这时在优化的时候可以利用交换分区技术和在线定义功能对普通表进行分区化转化, 实现对Oracle数据库分区的优化。在线定义功能是指在保证数据的一致性的基础上对操作表进行命令指示, 进行DML操作, 切换完成后可以不进行其他额外管理程序。交换分区是修改表的定义, 对数据不进行任何操作行为, 从而提高数据库优化的效率, 准确的检查表中的数据的完整性。在对其分区转化之后, 就可以实现对Oracle数据库的优化, 从而提高Oracle数据库工作效率。
4结论
综上所述, 通过对Oracle数据库性能调整与优化的分析研究, 可以看出Oracle数据库性能的调整和优化意义重大, 完善Oracle数据库各项功能有助于实现Oracle数据库的稳定运行, 在使用过程中不断的进行优化检查, 及时对性能进行优化, 实现Oracle数据库的持久发展, 推动数据库技术的发展, 为人们提供利用和服务。
摘要:随着科学技术和计算机网络技术的快速发展, 加大了信息数据的管理工作和构成的难度和复杂度, 为信息的保密性带来严峻挑战, 目前应用最为广泛的信息数据管理系统就是Oracle数据库, 其稳定性和信息安全性优势显著。在数据库系统运行时间不断延长的趋势下, 其性能出现了各种问题, 影响其运行, 因此需要对其性能进行调整和优化。本文对Oracle数据库进行简单介绍, 探索Oracle数据库调整和Oracle数据库优化的手段。
关键词:性能优化,性能调整,Oracle数据库
参考文献
[1]刘哲.基于Oracle数据库系统的优化与性能调整研究[J].绿色科技, 2015, 05:283-284+287.
ORACLE性能优化 第10篇
关键词:Oracal;SQL;优化
中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02
The Optimization Principles and Methods of SQL on Oracle Database
Zhang Xiaorong
(Xi’an University of Arts and Science,Xi’an710065,China)
Abstract:Oracle is RDBMS applying large,mediamsized and microcomputer.The problem of the database’performace optimization has been the focal point which people show solicitude for commonly,and a key factor affecting it’s performance is that executive efficiency of the SQL query sentence.In this paper we analyzed the need to optimize the SQL query,and Introduced the basic principles and methods of SQL statement optimization in Oracle Database,proved that SQL statement optimization greatly improve the performance of the database.
Keywords:Oracal;SQL;Optimization
一、引言
数据库系统是管理信息系统的核心,从大多数系统的应用实例可以看出,SQL语句的书写技巧以及其性能优劣往往是系统性能是否稳定的关键因素。SQL语句的执行效率直接影响系统的性能和运行速度。而相对于其他SQL操作,数据库中的查询操作所占的比重最大,查询优化也就有着相对重要的地位,构造科学合理的数据库查询系统,是开发数据库应用系统的重要步骤和环节。
二、查询优化的必要性
对于关系型数据库Oracle来说,大多数性能问题都是数据库设计不合理造成的,而SQL语句是对数据库进行操作的唯一途径,应用程序对数据库的操作最终要归结为SQL语句的执行。对于基于Oracle数据库的复杂的多层B/S结构的软件系统,用户终端对数据库的操作往往比较频繁,数据量较大,很多情况下查询过程是非常复杂的,如果能确保每个SQL语句能在最短时间执行,则用这些SQL组合成的系统将有着较高的运行效率。SQL语句的执行效率对数据库系统的性能起决定性作用,对查询语句的优化是提高系统查询效率的根本途径。
三、SQL语句优化原则和方法
Oracle数据库中影响SQL语句执行时间的因素主要是系统I/O(输入/输出)时间和SQL语句解析和执行的速度。因此,SQL语句的优化应遵循以下原则:(1)尽可能减少系统I/O操作。过多的I/O操作会大量占用系统CPU时间,影响SQL语句的执行速度。(2)优化排序操作,减少排序。过多的排序操作会增加SQL语句的解析和执行时间。(3)减少表的访问次数,尽可能避免全表扫描。表的访问次数过多或对比较大的表的全表扫描都会耗费系统资源,影响执行速度。遵循以上原则,Oracle中SQL语句优化的基本方法如下:
(一)合理使用索引:1.在经常使用为过滤器或查询频率较高的字段上建立索引。2.在用于连接的字段上(主键/外键)建立索引。3.在经常使用Group by和Order by的字段上建立索引。4.在经常存取的多个列上依据使用频率建立复合索引。但是,索引也是需要耗费系统开销的。一般过小的表没有必要建立索引。对于超大的表来说,,当返回的行数占表总行数的10%到15%时,使用索引可以极大地节省查询的时间,但当返回行数占40%以上时,使用索引将不再能提高查询效率。而且,由于表的更新同时要更新相关的索引信息,一张表上建立过多的索引会影响表的更新速度。所以,索引的建立需要均衡考虑相关因素,力求恰到好处。
(二)SELECT查询子句中只选择必要的列。SELECT*语句在执行时,Oracle先通过查数据词典获得每一列的字段名,然后才进行查询,如果其中一列被修改,则需要重新解析执行语句,这样将浪费CPU的处理时间和系统的I/O资源,而且也增加了维护的工作量。例如:Select*from phone,优化后可写为Select depart,number from phone。在服务器硬件性能不改变的情况下,优化前语句的执行时间是0.652s,优化后执行时间缩短为0.235s。
(三)正确使用DISTINCT。DISTINCT用来过滤掉重复记录只保留一条,往往用它来返回不重复记录,其执行时将产生一张工作表,通过排序来删除重复记录,这样大大增加了查询以及I/O操作次数,因此应合理使用DISTINCT,在不必要时尽量避免使用,以免系统资源浪费。
(四)可用WHERE子句代替HAVING子句。HAVING子句是在检索出所有记录集后才对结果进行过滤,这个处理需要现对结果进行排序、总计等操作,增大了系统开销。如果通过WHERE子句在汇总前就将汇总信息进行过滤,就可以节省这部分开销。例如,查询次消费金额大于1000元的客户的总消费金额。
优化前:Select Customer,Sum(Order Price)from Orders group by Customer having Order Price>1000;
優化后:Select Customer,Sum(Order Price)from Orders where Order Price>1000 group by Customer;
优化前执行时间为0.344s,优化后执行时间为0.289s。
(五)可用UNION代替OR(适用于索引列)。如果在WHERE子句中的索引列使用OR联接,执行时将会进行全表扫描,此时用UNION代替OR可提高查询效率。注意,此规则适用于多个索引列有效,如果没有索引列,查询效率可能会因为没有使用OR而降低。例如:
优化前:Select S_name,S_salary,S_allowance from Tab_Sal where S_salary>1500 or allowance>2000;
优化后:Select S_name,S_salary,S_allowance from Tab_Sal where S_salary>1500 union(Select S_name,S_salary,S_allowance from Tab_Sal where allowance>2000);
检出记录数321条,优化后执行时间由0.925s缩短为0.691s。
(六)可用UNION ALL代替UNION。UNION操作使多个记录集联接成为一个集。UNION操作在表联接后对产生的结果进行排序,删除掉重复的记录后才返回结果。而UNION ALL操作允许重复,不要求进行SORT UNIQUE操作,从而节省了系统开销。
(七)注意WHERE子句中约束条件的顺序。Oracle数据库是采用自下而上的方式来解析WHERE子句的,因此应该将能过滤掉最多记录的条件写在WHERE子句的最后,而将表之间的连接写在其他约束条件之前,从而提高查询效率。例如:
优化前:Select A.S_name,A.S_salary,A.S_allowance,B.eage from Tab_Sal A,Tab_Num B where A.S_salary>2000 and A.S_name=B.Name;
优化后:Select A.S_name,A.S_salary,A.S_allowance,B.eage from Tab_Sal A,Tab_Num B where A.S_name=B.Name and A.S_salary>2000;
优化前执行时间为0.325s,优化后执行时间为0.236s。
(八)有效整合Sql语句,减少表的访问次数。对于同一张表的多次访问,可以通过将相近SQL语句有效整合,从而减少对该表的访问次数,避免过多的系统资源消耗,有效提高查询效率。举一个简单的例子:
Select Customer,Level,Sum(Order Price)from Orders where Level=3 group by Customer;
Select Customer,Level,Sum(Order Price)from Orders where Level>=4 group by Customer;
整合后:
Select Customer,Sum(Order Price)from Orders where Level>=3 group by Customer;
对如上SQL语句进行整合后,其执行速度提高了一倍。
四、结束语
通过本文提出的SQL优化原则和方法对某企业Oracle数据库进行性能优化调整之后,其系统响应时间已明显下降,程序运行速度有所提高,良好的保障了系统的运行。Oracle数据库内部结构比较复杂,影响其性能的因素较多,但是在系统硬件性能一定的情况下,优化SQL语句是数据库性能得以提高的根本途径。SQL语句的优化方法還有很多,本文提出的只是笔者在使用过程中总结的原则和方法,更多的优化策略需要我们在实际应用中不断地总结和探索。
参考文献:
[1]周志德.Oracle数据库的SQL查询优化研究[J].计算机与数字工程,2010,11:173-178
[2]邓春娜,周晓红.Oracle数据库的查询优化方案[J].信息科学,2010,5:19
ORACLE性能优化 第11篇
作为信息系统的一个核心技术,数据库技术就是人们用数据库管理系统对数据进行组织、存储、编码和检索的技术[1]。随着现代科学技术的飞速发展,数据库技术已成为信息化社会的基础,并渗透到人类生活的各个领域,如计算机、通信、信息管理和电子商务等。但许多情况下,比如服务器崩溃、传输线路中断、系统病毒侵袭、人为操作错误、停电断电、磁盘损坏等突发事件都有可能造成数据库文件损坏或者丢失,从而给企业带来不可估量的损失[2]。因此如何提高数据库的鲁棒性和面对各种突发事件时的可靠性,都是数据库技术发展而不能忽视的问题。作为全世界Oracle数据库中的第一个关系型数据库,Oracle服务器凭借其出色的数据处理性能、可靠的稳定性和安全性,在企业和政府部门的信息化过程中得到了广泛的应用。但在实际应用过程中,各种各样的因素都会影响Oracle服务器的性能及其稳定性。例如,随着服务系统中数据的增加,服务器的系统性将会有所下降[3]。这样服务器性能的调整优化就事在必行,必须将性能调整到更适合系统的需要。于是将从以下几个方面来分析Oracle服务器性能的影响因素:计算机系统的内存、计算机网络的速度和I/O系统超载情况,然后针对这些可能出现的问题,提出相对应的解决策略,提高Oracle服务器的性能和使用效率,满足市场对服务器可靠性的需求。
2 影响因素
相关研究指出,众多商务公司在遭受灾难突然袭击之后的服务中断中,都会带来巨大的经济损失。根据相关调查显示:在遭受突然袭击的灾难后,只有约6%的企业能在商务数据丢失后生存下来,然后约43%和51%的企业将在数据丢失后的约半年和两年内彻底倒闭和消失。所以服务器的稳定性显得异常重要,接下来将对Oracle服务器的影响因素进行分析。
2.1 计算机系统内存
在计算机执行命令过程中,处于等待状态的数据和请求信息也都放在作为计算程序运行场所的内存中。这时候如果计算机内存不足,cache(高速缓存区)的效率就不会太高,大部分计算机运行命令所需的数据不在cache中,因此就出现了瓶颈问题,导致操作系统频繁换页和交换,从而使得计算机系统额外的I/O开销,降低了服务器的使用效率。
2.2 计算机网络速度
网络性能方面的问题将降低数据库系统的吞吐量并延长用户响应时间[4]。当计算机网络中的用户过多,或者当其他影响网络速度的因素产生时,都会加重计算机网络的负担产生瓶颈问题,使得网络不可能把数据传输得更快,影响了客户使用服务器的信心。
2.3 I/O系统超载
服务器的存储数据都是在物理磁盘上的,而I/O系统超载将直接导致系统需要等待磁盘返回数据而降低整个系统的速度。使得监控磁盘1/O并对其进行调整非常重要,预防I/O系统超载情况的发生。
3 优化调整
3.1 调整与优化数据库
数据库设计优劣与否将直接影响到服务器的运行性能。即要在良好的Oracle方案中实现最优的性能,最关键的是要针对实际情况设计最优的数据库运行方案。当然,这一部分应该是在开发信息管理系统之前完成的。在相关说明书中,可以查到Oracle系统本身已经提供了若干种对系统性能进行调节的技术,但是如果所应用的数据库在整体结构设计方面就有所欠缺,那么按照Oracle系统本身的优化调节技术都是达不到很好效果的[5]。因此提高数据库应用系统的性能首先应从数据库设计开始,并从逻辑和物理两方面来完成对数据库的优化设计。
3.2 调整应用程序结构
同3.1节中的调整与优化数据库设计一样,在开发信息管理系统之前,应根据实际的应用需求设计相对应的体系结构。众所周知,传统的C/S(Client/Server)模式比较适合于用户较少、规模小、单一数据库且在安全、快速的网络环境下运行;而当用户数较多时,这时存在大量客户端的发送数据请求,此时如果数据库的体系结构设计不好的话,服务器有限的系统资源将被用于频繁应付与客户端之间的连接[6],此时应针对实际情况使用三层B/S(Browser/Server)模式或多层体系结构。
3.3 优化SQL语言
据有关专家的统计,从硬件、操作系统和网络等方面来对服务器的性能进行优化调整时,只能将服务器的性能提高40%左右,不能从根本上解决优化调整Oracle服务器的问题。很显然,另外60%的提升性能该如何实现呢?此时,可从优化服务器对应程序的角度出发。一般情况下,通过优化源代码和SQL语言可以很好解决这一问题。这里,主要讨论SQL语言的优化问题。因为在服务器工作过程中,被执行的SQL语句消耗了70%至90%的数据库资源,应用程序对数据库的操作最终表现为SQL语句对数据库的操作,因此SQL语句的执行效率决定了数据库的性能[2]。此时,通过对SQL语言的优化和访问数据库方法的调整,可以显著地提升信息管理系统的性能,对提高数据库内存命中率和Oracle服务器的执行效率有着非常重要的意义。
3.4 调整数据库内存分配
如果计算机内存不足,这时大部分计算机运行命令所需的数据不在cache中,就会出现瓶颈问题,导致操作系统频繁换页和交换。众所周知,多数操作系统都用虚拟内存来模拟计算机上更大的内存,达到快速处理数据和请求的目的。但当实际的内存空间不能满足应用软件的要求时,就会导致上述操作系统频繁换页和交换的问题,引起大量的磁盘I/O操作,引起I/O系统超载情况的发生,降低整个服务器的性能。
3.5 配置和调整操作系统性能
虽然操作系统是系统所固有的,但考虑到Oracle服务器的稳定性在很大程度上依赖于操作系统的性能。于是要根据实际使用的情况,来配置和调整整个操作系统的性能。实施操作系统级调整的主要目的是减少内存交换和分页,使SGA(System Global Area)可留驻内存[7]。根据实际使用的情况来看,重新配置和调节Oracle服务器的操作系统可以主要从以下几个方面进行:为Oracle数据库规划系统资源、设置操作系统进程优先级和调整计算机系统中的内存配置。除此之外,不要在操作系统中调整Oracle进程的优先级。因为在实际应用过程中,Oracle数据库系统中的前台与后台数据库服务器进程执行的是同等重要的工作,需要同等的优先级[8]。
4 结语
随着计算机应用技术的快速发展和市场对信息管理系统的需求,且作为计算机信息与应用系统的核心基础,服务器的重要性越来越引起人们的广泛关注。从计算机系统的内存、计算机网络的速度和I/O系统超载这3个方面分析了影响Oracle服务器的主要因素,并针对这些影响因素提出了相应的优化调整策略,在提高服务器使用效率的前提下满足人们对信息管理系统的需求。
摘要:随着数据库被更为广泛地使用和用户数量的增加,使得Oracle服务器应用系统的响应速度下降,而服务器性能的优劣直接影响到整个系统的正常运行。分析了Oracle服务器性能影响因素,提出了对应的优化调整策略。
关键词:Oracle数据库,服务器,计算机网络,SQL语言
参考文献
[1]陆晨音.Oracle8i数据库系统的优化与调整[J].计算机工程,2001,27(6):180-182.
[2]姜维智.Oracle数据库性能优化[D].成都:电子科技大学,2007.
[3]刘增军.高可用性数据库系统研究、应用与性能优化[D].长沙:国防科学技术大学,2006.
[4]高艳春.Oracle性能调整与优化[M].北京:人民邮电出版社,2002.
[5]张云帆.Oracle数据库备份与恢复策略[J].计算机工程,2009,35(15):85-87.
[6]仇道霞,陆伟,侯晓辉.Oracle数据库性能调整优化[J].山东轻工业学院学报,2005,24(3):52-54.
[7]谢东.基于Oracle的数据库安全策略[J].现代情报,2006,26(1):119-120.