摘要:随着数据库在生活中各个领域中的广泛应用,数据库产品也层出不穷。其中,oracle数据库产品在整个数据库产品的应用中占据50%,并且有不断上升的趋势。可是,随着数据库数据量的增大、并发用户数量增多,系统常常出现吞吐量降低,响应时间延长等性能问题,怎样有效优化、改善数据库性能,突破系统瓶颈,是保证 oracle 数据库高效运行的基础。oracle 数据库系统性能优化、调整是一项复杂的系统工程,贯穿于系统的整个生存周期中。 关键词:oracle数据库;性能优化;索引;sql语句 中图分类号: tp311 文献标识码: a 文章编号:1009-3044(2013)13-2943-03 1 概述
数据库优化不仅仅是dba(数据库管理员)的事情,它也是设计人员、应用开发人员必须做的事情。有人认为,优化数据库不用着急,在系统出现宕机或者慢到无法忍受时再优化不迟。但此时,往往无法有效的对相应的数据库进行更为有效的优化。所以我们应当在整个数据库的生命周期中,给予不断地优化,以使数据库达到最好的性能[1]。
2 数据库系统性能评价指标 2.1 系统吞吐量 2.2 响应时间
响应时间是,在用户提交任务要求到数据库做出回应的时间。其
实质就是,终端客户等待后台处理所花费的时间[2]。因此响应时间优化的重要性不言而喻。调查显示,当用户等待一项任务的响应时间超过几秒钟时,用户可能就会对此系统产生不满或者厌烦的情绪。因此,我们必须通过优化,将响应时间降到最低。 2.3 数据库的命中率
数据库命中率是数据库性能中非常重要的评价指标,包括数据库缓冲区命中率和共享池命中率。缓冲区命中率是指用户需求的数据是否存放在在内存中,该命中率是指高速缓存命中总数除以高速缓存的查找总数;共享池命中率决定了用户提交的 sql语句是否需要进行重新解析,该比率等于 sql 语句的解析次数除以sql语句总的执行次数。通常情况,数据库的命中率应该在 90%左右,低于这个值的系统均需要做出优化和调整[3]。 3 几种数据库的优化方法
3.1 系统(硬件和操作系统)优化方案 1)硬件的优化方案
对于优化,通常来讲,对硬件的升级是比较常见的手段。据调查,对内存、硬件、网络、数据库参数、操作系统进行调整,可以提供数据库系统性能将近一半的提升 。硬件的优化主要包括:将cpu升级更高的频率,采用多磁盘,扩大内存的容量,改善带宽的i/o性能等等。
这里我们简要介绍一下对内存参数的调整。内存参数的调整主要是对oracle数据库中系统全局区的调整。系统全局变量主要由三
部分构成:共享池、数据缓冲区、日志缓冲区。 2)操作系统的优化方案
操作系统性能对数据库的使用性能起到了决定性的作用,假如操作系统配置不完善,那么只对 oracle 数据库内部性能调整是不会提高系统性能的,所以oracle服务器使用资源的大小,必须与服务器的硬件资源相结合。在对 oracle 数据库系统进行诊断和调整时,首先应通过操作系统的相关命令,检查 cpu、内存、磁盘及网络环境。例如在 windows2000 下:禁止不必要的网络协议;可以使用性能监视器来监视 windows 下的 oracle 内存使用;利用 windows进行内存调优等。 3.2 运用索引技术
建立索引是优化数据库中一个非常重要的步骤,也是优化查询最为重要的方法, 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。运用索引也可以省去表扫描,并且可以减少因查询而造成的系统 i/o的开销,大大提高数据库查询的速度,并改善数据库的性能。但是创建索引会增加系统的时间和空间的开销。因此创建索引时必须要与实现应用系统的查询需求密切结合,才能达到优化查询的目的。
在实际操作中, 我们通常是先考察sql所有的语句,并通过统计,选中其中常用的并且可能对性能产生影响的语句,对其进行分析,归纳出where 条件子句的字段,以及各种组合方式;这样,就基本可以初步判断出我们应该在哪些表的哪些字段建立起索引。
3.3 sql 语句的优化
在程序设计中的一个著名定律:20% 的代码用去了 80% 的时间。在数据库应用程序中也同样如此。对于数据库应用程序来说, sql 语句的优化是提高应用程序效率的重要因素[4]。 在进行sql语句优化的时候,我们要注意以下几点: 1)尽可能降低对数据库的使用频率,可以通过显性图或者快照等分布式数据库对象来实现。
2)尽可能的在建表的sql语句中来描述表中数据的约束,而不要在sql的程序中实现。
3)取消自动提交模式,将sql语句汇集一组,然后集中提交,并且程序还可以通过显式的用commit和rollback进行提交、并回滚该事务。
4)当检索大量的数据时,往往花费很长的时间,所以要通过进行设置行预取数,可以明显的提高系统的性能。当sql语句返回值超过我们设置的最大值时,让数据库在用户发出新指令之前暂停执行,及时的组织并显示需要的数据。
在sql语句中,由于where语句使用的普遍性,对where语句的优化显得尤为重要。下面就对sql语句的where子句中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的sql,系统在运行该sql语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。 3.3.1 is null 与 is not null 语句
在有null(空)和 is not null(非空)的语句中。只要包含 null 值的列,都不会被包含在索引之中。也就是说,在运用索引时,只要是发现某列存在 null 值,该列就会被剔除,即使对该列建索引也不会提高性能。只要在where的子句中使用空或非空的语句,那么优化器是不会使用索引的。所以只能适当采用其他方法。 3.3.2 联接列
对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。举个例子,假定有一个职工表(employee),对于一个职工的姓和名分成两列存放(first_name和last_name),现在要查询一个叫科比·布莱恩特(koby bryant)的职工。 当采用下面这种sql语句的编写,oracle系统就可以采用基于last_name创建的索引. 4 结束语
oracle 10g数据库系统性能优化与调整是一个复杂、繁琐的系统工程,贯穿于数据库系统开发的整个过程。数据库系统配置的调整,包括内存结构调整、磁盘 i/o 调整以及应用程序优化等,直接决定了整个数据库系统的性能,应该利用各种性能优化手段进行反复的调整、比较以消除瓶颈,获得系统最优性能。 参考文献:
[1] 朱丹辉.基于oracle 的数据库性能优化探讨[j].就业与保障,2012(11):33-34.
[2] 肖军.oracle数据库性能调整与优化[d].武汉:武汉大学,
2004.
[3] 任艳.oracle 数据库性能调整与优化技术探讨[j].中国新通信,2013(2):3-4.
[4] 张静,张雨,许春艳.基于 oracle 数据库的查询优化技术[j].科技创新导报,2009(6):26.
[5] 王妍.oracle数据库的优化设计[j].中国科技信息,2012(23):85.
[6] 王慧清.oracle数据库应用中出现的问题及其对策[j].中国新通信,2013:2-4.
[7] rick greenwald. professional oracle programming[m].widely publishing,inc.
因篇幅问题不能全部显示,请点此查看更多更全内容