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 数据库的性能优化涉及的方面很广,优化与调整是一个需要通过不断摸索、总结的过程,在实践中,必须先了解影响数据库系统性能的因素,针对这些不同的因素选择合理的优化调整策略予以调整,同时也需要采取更加先进的技术来对数据库进行调优,使得数据库系统获得优性能。