对Oracle数据库性能优化技术的研究

大型关系数据库Oracle已经广泛应用于各行各业,如政府、交通、公安、电信、金融、能源等部门,并已逐渐成为企业信息化建设的重要数据库平台,但随着 Oracle 数据库规模的扩大,数据库用户人数的增加,数据库性能问题越来越突出,因此,有必要对 Oracle 数据库性能进行调整与优化, 使之在满足需求条件下,系统性能达到最佳和系统开销最小。

  1、性能优化目标

  1.1 缩短响应时间

  响应时间是指从用户提交SQL语句到数据库返回结果集的第一行数据所需要的时间,缩短响应时间可以通过减小系统服务时间或用户等待时间来实现,通过使用毫秒ms来表示,通过缩短响应时间,既能减少用户请求的处理时间,又能提高系统资源利用率。

  1.2 提高系统吞吐量

  数据库吞吐量指在单位时间内数据库所能完成的SQL 语句事务数量,吞吐量=事务量/时间,通常用TPS(每秒钟的事务量) 来表示,提高数据库的吞吐量可以在同样的时间内处理更多的请求,即在相同的资源环境内做更加多的工作

  1.3 提高数据库多个指标的命中率

  数据库指标包括数据库高速缓冲区命中率、库缓冲区命中率、软解析率等,其中,高速缓冲区命中率是最常用的指标, 高速缓冲区命中率=高速缓存命中总数/数据请求总数,通常使用高速缓冲区命中率来衡量Oracle数据库的性能。

  1.4 优化磁盘I/O

   Oracle 数据库将数据储存在磁盘和内存中,想要往Oracle中写入和读取数据基本上都会涉及到 I/O 操作,通过对磁盘合理的进行规划,利用高速缓存技术,可以提高系统吞吐量,缩短用户响应时间,尽可能有效地利用系统物理内存而尽量避免或推迟使用磁盘 I/O 操作。

  1.5 合理使用内存

  在大量并发用户数下,若Oracle 内存尺寸不够会降低程序的处理效率,延缓数据库的响应时间,内存是否合理使用,一般可以从使投资得到最大回报和使争用减到最小这两个指标来判断,通过合理使用内存,可以大大提高系统性能。

  1.6 减小磁盘排序

  当用户提交的 SQL 语句含有聚合函数或者有排序时,这些排序可能在内存中进行,也可能在物理磁盘上进行。由于物理磁盘自身结构的原因,其读写速度远远慢于内存读写,因此一个优化的原则是尽可能减少物理磁盘排序操作。

  2、影响Oracle性能的因素

  影响Oracle数据性能的因素有很多,比如:操作系统,CPU 性能,内存分配不合理,Oracle 配置,I/O 冲突,网络速度低以及SQL使用常见错误等等都会影响数据库的性能。

  1)操作系统:Oracle 数据库服务器很大程度上依赖于运行服务器的操作系统,操作系统配置不合理会直接降低Oracle性能;

   2)CPU占用过高:CPU 是服务器中一个重要的资源 ,CPU 资源被其它应用占用或被某个数据库事务占用,会导致其它数据库事务运行停滞,而使数据库响应迟钝,比如:空闲时,CPU占用率超过90%,则说明 Oracle服务器CPU资源不足,低效率的 SQL 语句、锁冲突、SQL 语句的重解析等原因都会引起 CPU 资源不足;

  3)I/O 冲突:由于磁盘在同一时刻只能满足一个进程的需要,当多个进程同时访问同一个磁盘时,会引起读写盘冲突,进而降低整个系统的速度;

  4)Oracle 配置:每一个 Oracle 实例都是由一组 Oracle 后台进程和系统全局区的一个内存区所组成的, 正确调整 Oracle 配置将会对系统性能产生重大的影响;

  5)内存分配不合理:内存分配不合理将会减少 Oracle 用于存放最近访问过的数据的缓冲区空间,并导致操作系统频繁进行页面或内存交换,从而导致计算机系统额外的 I/O 开销;

  6)网络速度低:网络的带宽会在一定程度上影响系统的整体性能,网络速度过低会增加网络 I/O 负荷量,从而降低数据库系统的吞吐量并延长用户响应时间;

  7)SQL使用常见错误:配置和数据迁移的错误,大量递归 SQL 语句的存在,长时间的全表扫描,一些数据库结构的设置不合理,重做日志文件的不合理设置,I/O 设备的不合理的规划,非标准参数的使用,执行效率很差的 SQL 语句,游标和共享池的错误使用,低效率的数据库连接。

3、性能优化优化与调整技术

  3.1 调整优化数据库

  1)最常见的调优方法是在数据库中增加索引,索引(index)是常见的数据库对象,充分利用索引来减少表扫描的 I/O 次数,使用索引可以避免不必要的大表全表扫描,索引设置的位置要视 where 子句中索引列所应用的查询条件而定,通过索引对表的数据进行检索比起直接全表扫描所引起的I/O操作要小得多,索引可增加查询速度;

  2)若某种业务的数据量增长非常快,可以使用分区表技术将数据进行分散,将不同表空间分布到不同的磁盘当中,使得硬盘之间 I/O 负载均衡,在一定程度上缓解了数据量过大引起的负面影响,并且会缩短查询时间;

  3)使用存储过程完成数据库中频繁执行的应用逻辑,使代码编程与数据库的操作分离,可以降低网络传输量,提高数据请求的执行效率,执行存储过程时,用户只需要发出执行命令,而不再进行SQL语句提交,节省了系统的SQL语法分析,充分利用了SQL共享池;

  4)使用Oracle优化器执行直接提交的查询SQL 语句,可以大大提高语句的执行效率;

  5)使用触发器自动执行的SQL语句,可以降低网络 I/O及系统资源的消耗,如需要对所有访问数据库的程序自动实施一定规则或检查,则使用触发器可以大大提高效率。

  3.2 调整优化内存

  Oracle的信息存储在内存和磁盘上,由于访问内存比访问磁盘快得多,在大量并发用户数下,如果Oracle 内存尺寸不够会降低程序的处理效率,延缓数据库的响应时间,提高数据库性能需要设置合适的内存尺寸,Oracle 内存包括系统全局区 (SGA)和程序全局区 (PGA)。

  3.2.1 调整SGA的大小

  根据数据库运行状况重新调整SGA的大小,对每个节点修改SGA大小的方法如下:

SQL>alter system set sga_target=200m scope =both sid=’RACDB1’;
SQL>alter system set sga_target=200m scope =both sid=’RACDB2’;

  3.2.2 提高共享池性能

  共享池主要是用来存放最近使用过的 SQL语句,共享池内存分配算法保证了数据字典数据比库缓冲区数据在内存停留时间更长,命中率更高,应优先调整库缓冲区。

  1)通过调整参数SHARED_POOL_SIZE的值,可以根据实际情况对每个节点共享池的大小进行调整;

  2)为了提高共享池命中率,可以使用代码重用方法;

  3)对于比较大的对象,如自定义的过程与包,在载入共享池以及硬解析的过程中需要共享池付出很大的代价, 把重要的大对象保持在内存中,可以大大提高共享池性能。

  3.2.3 优化数据缓冲区高速缓存性能

  为减少系统磁盘 I/O 开销,应调整数据缓冲区的尺寸,使服务器进程尽量在缓冲区中找到所需的数据,尽量减少等待数据块或空闲缓冲区的时间。

  1)加大Buffer Cache的大小

  可以通过调整DB_CACHE_SIZE参数的值增大Buffer Cache。

  2)使用多个缓冲池

  Keep池中数据倾向于一直保存,Recycle池中的数据倾向于即时老化,而Default池则存放未指定存储池的数据,通过使用多个缓冲池提高Buffer Cache的命中率。

3.2.4 尽量减少全表扫描

  通过索引的正确使用可以避免不必要的全表扫描,发生的全表扫描越少,Database Buffer Cache命中率将越高,但对于一些表比较小且需要表中的大多数数据时,这时使用全表扫描响应时间可能就会优于不使用全表扫描,通常,当该表的结果集和表 中记录总数的比值大于20%时,就应该要使用全表扫描。

  3.3 调整优化磁盘I/O

  1)经常使用的对象产生 I/O 争用的机会较多,应将访问量较大的数据文件放在独立磁盘上,同一个表空间的多个数据文件应尽可能地放在不同的磁盘上,为索引创建单独的表空间,并将表和索引分开在不同的表空间;

  2)在内存中修改过的数据不是直接写入数据文件,而是先写入重做日志文件中,重做日志文件要足够大,要与数据文件存放在不同的磁盘上,减少对磁盘的竞争,重做日志文件分为几个组,写满一组时切换至下一组,最后一组写完后再返回至第一组,按顺序循环写入;

  3)Oracle 的文件和操作系统的其他文件应尽可能地放在不同的磁盘上,这样可以减小 I/O争用的概率;

  4)最好使用目前较流行的廉价磁盘冗余阵列(raid),它能自动分离不同类型、访问频率的数据库文件,减小I/O进程之间的竞争,优化数据库性能;

  5)创建回滚段及其专用的表空间,回滚段是为了从系统操作的失败中得到数据的恢复,从而减小I/O进程之间的竞争,防止空间竞争影响事务的完成;

  6)单独创建用户数据表空间,且要与系统表空间(system)分开磁盘存放,创建临时表空间用于排序操作,尽可能防止数据库碎片存在于多个表空间中。

  3.4 SQL优化

  SQL 语句本身的执行效率直接影响Oracle 数据库执行效率,它消耗了数据库系统 70%~90%的资源,对SQL语句进行合理设计可以使其更高效地执行,以提高系统对资源的利用率,好的SQL语句可以加快执行速度,减少网络传输,从而 最大限度地发挥数据库的性能。

  1)尽量减少对数据库的查询次数,对几个表查询时 FROM 子句的顺序,按照由内及外的访问顺序应把可筛选出较少记录的表放在前面,执行时最先查找出这个表的几个记录,再和其他表的记录相连接;

  2)为了充分利用库缓冲区的 SQL 解析信息,对于经常运行条件子句变量值不同的 SQL 语句,应将这些变量改为统一的绑定变量;

  3)调整 SQL 的关键是使数据库寻找数据的路径最简化,限制动态SQL的使用,优化操作符,如in或not in,is null 或 is not null,like ,union 等操作符,应尽量少用;

  4)避免不带任何where条件的SQL语句的执行,使用order by、group by、union 等条件的 SQL 语句会对查询完的数据进行排序,增大了 PGA 或 TEMP 的负担,优化这些语句时可在使用这些条件的列上加上有序索引;

  5)对SQL 语句的索引进行优化,如:在索引列使用 is null 和 is not null,或进行了显式或隐式的运算时索引不被使用,采用函数处理的字段也不能利用索引等;

  6)避免相关子查询,查询嵌套层次越多,效率越低,为了加速查询速度,可以使用临时表;

  7)在系统不繁忙或在大量对象更改后定时或及时统计数据库信息,选择适当的方法进行优化,包括几种常用方法:基于代价的优化(CBO),基于规则的优化(RBO), 对于需要经常进行查询的表,可以通过建立索引或嵌入内存区以提高查询效率。

  4、数据库优化实验

  选取约为5Gbyte左右的信贷管理系统作为数据库优化实例,该数据库运行在HP ProLiant BL490c G7(603599-B21)服务器上,使用UNIX操作系统,优化结果如表1所示。

  从表1可以看出,数据库经过调整优化数据库、调整与优化内存、调整与优化I/O和SOL优化后,响应时间变得越来越短,系统性能得到逐步提高。

  5、结束语

  随着Oracle数据库规模的扩大,用户数量的增加,Oracle数据库性能问题越来越突出,Oracle 数据库的性能优化涉及的方面很广,优化与调整是一个需要通过不断摸索、总结的过程,在实践中,必须先了解影响数据库系统性能的因素,针对这些不同的因素选 择合理的优化调整策略予以调整,同时也需要采取更加先进的技术来对数据库进行调优,使得数据库系统获得最优性能。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-11 11:18:36

对Oracle数据库性能优化技术的研究的相关文章

Oracle数据库性能优化技术开发者网络Oracle_oracle

正在看的ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle.介绍:细处着手,巧处用功.高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些.电脑小技巧收集最新奇招高招,让你轻松踏上高手之路.  摘要: Oracle数据库是当前应用最广泛的大型数据库之一,而其性优化直接关系到系统的运行效率.本文以数据库性能优化的基本原则为出发点,阐述了在数据库设计阶段如何避免竞争和如何优化数据访问,在数据库运行阶段如何从操作系统和数据库实例级别上调整内存和I/O来达到数据库性能优化的各种技

Oracle数据库性能优化技术

摘要: Oracle数据库是当前应用最广泛的大型数据库之一,而其性优化直接关系到系统的运行效率.本文以数据库性能优化的基本原则为出发点,阐述了在数据库设计阶段如何避免竞争和如何优化数据访问,在数据库运行阶段如何从操作系统和数据库实例级别上调整内存和I/O来达到数据库性能优化的各种技术. 关键词:Oracle数据库:性能优化:内存:I/O 1. 引言 随着网络应用和电子商务的不断发展,各个站点的访问量越来越大,数据库规模也随之不断的扩大,数据库系统的性能问题就越来越突出,因此,如何对数据库进行调优

【性能优化】ORACLE数据库性能优化概述

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据库完成的SQL语句数目:数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间.数据库用户响应时间又可以分为系统服务时间和

《Oracle数据库性能优化方法论和最佳实践》——第1章 Oracle性能优化漫谈 1.1 从生活场景漫谈性能优化

第1章Oracle性能优化漫谈 1.1 从生活场景漫谈性能优化 Oracle数据库性能优化一直是一个让人既胆怯又兴奋的话题,在初级DBA眼里,这是一个神秘的领域,即使是资深的Oracle DBA,也可能无法描述清楚性能优化究竟要做什么,应达成什么目标.那么性能优化究竟是做什么的呢?简而言之,性能优化就是让我们的工作速度变快,快到让我们满意为止.自然,又有读者会问了,我们的工作是什么呢?什么程度才算快,是否可以衡量?看,头疼的问题又来了.1.1.1 从一个真实病例说起 下面是本人的真实经历,也许很

ORACLE数据库性能优化

实际上,为了保证ORACLE数据库运行在最佳的性能状态下,在http://www.aliyun.com/zixun/aggregation/32730.html">信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序 SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的. 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据

《Oracle数据库性能优化方法论和最佳实践》——第2章 Oracle性能优化方法论的发展 2.1 基于局部命中率分析的优化方法论

第2章 Oracle性能优化方法论的发展 Oracle数据库在开发和使用过程中对数据库的性能优化极为重视,几乎在每个版本的更新中都会对可优化的数据库做出改善.不仅如此,Oracle数据库还会使用优化方法来指导性能优化,会不断推出新的性能优化方法论,并依据优化方法论持续完善其可观察的性能优化体系.从Oracle 6到现在的Oracle 12c,经历了Oracle 7.Oracle 8.Oracle 8i.Oracle 9i & R2.Oracle 10gR1 & R2.Oracle 11gR

oracle数据库性能优化方案精髓整理收集回顾

oracle数据库性能优化总体法则: 一.减少数据访问(减少硬盘房访问次数) 二.返回更少的数据(减少网络传输或磁盘访问) 三.减少交互次数(减少网络传输) 四.减少服务器开销(减少cpu及内存开销) 五.利用更多的资源(增加资源) ===================具体说明================= 一.减少数据访问(减少硬盘房访问次数) 1.减少数据访问 1.1.创建并使用正确的索引 索引会大大增加DML(增删改)的开销[合理的索引会大大提高效率100倍.1000倍,但不合理的索

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图

《Oracle数据库性能优化方法论和最佳实践》——2.5 基于资源瓶颈分析的优化方法论

2.5 基于资源瓶颈分析的优化方法论 2.5.1 基于资源瓶颈分析优化方法论简述 Oracle要做优化,大部分人首先会想到瓶颈在哪里?资源瓶颈分析是如此之普及,以至于无论懂还是不懂的人都知道"瓶颈"这个术语,都知道性能优化首先要找到这个瓶颈,然后消除这个瓶颈.数据库系统的资源主要包括:CPU.内存和虚拟内存.I/O子系统.网络子系统. 绝大部分开发人员在写程序的时候都假设资源是无限的,CPU是无限快,内存是无限多,磁盘无限大并且像内存一样快,网络带宽无限并且像光速一样运行.事实上,大家