时间:2022-10-16 06:54:12
【摘要】oracle数据库是当今大中型信息系统使用最普遍的数据库管理系统之一,基于oracle的系统在使用过程中的优化是保证系统高效运行的保证,影响数据库性能的因素是多方面的,本文详细研究了oracle数据库的优化技术在系统中的应用策略与方法。
【关键词】oracle数据库;优化;索引
【中图分类号】TP392 【文献标识码】A 【文章编号】1672-5158(2012)09-0107-01
1、引言
随着信息技术与数据库技术的不断发展,越来越多的行业开发了自己的数据库应用系统。许多系统的数据库的数据量相当庞大且对数据库的响应性能要求很高,Oracle是目前应用最为广泛的数据库管理系统之一,提高Oracle数据库系统的运行效率,是整个计算机信息系统高效运行的必备前提和保证。本文以Oracle数据库优化技术理论为指导,结合一个实际的数据库应用系统,深入研究了Oracle优化技术在系统的应用方法与策略。
2、数据库参数设置
2.1 CPU参数的调整
CPU是服务器的一项主要资源。服务器良好的工作状态时在工作高峰时,CPU的使用率在90%以上。如果空闲时间CPU的使用率就在90%以上,说明服务器缺乏资源。
对UNIX操作系统的服务器,可以使用sar-u命令查看CPU的使用率。可以通过查看$sysstm数据字典“CPU used by this session”统计项得知ORACLE数据库使用的CPU时间,查看“OSUserlevelCPU time”统计项得知操作系统用户状态下的CPU时间,查看“OSSystem call CPU time”统计项得知操作系统状态下的CPU时间。
还可以通过查看v$sysstat数据字典来获得当前连接ORACLE数据库的各个会话占用的CPU时间,从而得知什么会话耗用服务器的CPU比较多。
3、表分区和建立索引
3.1 Oracle数据库分区通过ORACLE数据库的分区技术,能够有效地提高各终端程序的运行性能,达到服务器数据库应用性能优化的目的。在ORACL E数据库中,只有表和索引可以分区,表和索引分区后,同样对用户是透明的。由于表的逻辑结构没有任何变化,用户仍可按非分区表那样对分区表进行操作。而且在应用开发过程中,也可以充分利用其特点,发挥其所带来的优势。此处仅阐述表的分区。表分区建立的原则有以下三点:
1.基于数据访问量的原则:当分区表的访问数据量十分大时,可用数据的访问量作为分区原则,保证每个分区的数据访问量大致均衡。
2.基于数据容量的原则:在决定分区的范围界限时,能使分区表中的每个分区的数据量大致相同。
3.基于数据访问频率的原则:当对分区表的访问非常频繁时,可以将划分原则定为访问频率,即划定分区范围界限时保证每个分区的访问频率基本相同。
Oracle提供5种分区的方法用于对表进行分区,每种方法都具有各自不同的应用特征,在实际应用中需根据需求及分区键的属性特征选定一种适合的分区方法。
1.范围分区:由一定范围值的分区关键字指定每个分区,这是最常用的分区类型,而且常常分区键为日期类型。经常查询一定时间范围的表时可以考虑使用时间字段划分范围分区。
2.列表分区:由列表值的分区关键字指定每个分区,能够准确地控制数据行到分区的映射,用一种自然地方式组织无序和无关联的数据集。如果某个表的数据能够按照某个字段的值分为数目大小相近的几部分且经常查询的数据总属于一个部分时可以考虑使用列表分区。
3.散列分区:将散列算法用于分区关键字来确定指定行的分区,通过散列函数控制数据行到分区的映射,分区易于实现,并且有助于提高并行查询,连接等操作的执行性能。通常无法有效划分范围的表可以使用散列分区。
4.组合分区:组合分区首先进行范围分区,然后在每个子分区中使用散列或列表分区。如果某表按照某列分区之后,仍然较大,或者一些其它的需求,就可以通过分区内再建子分区的方式将分区再分区,即组合分区。
3.2 Oracle数据库索引优化Oracle的索引,是最常用的数据库优化手段,索引就好像字典的目录。合适的好的索引,不但能极大的优化查询的性能,还能优化与查询相关的操作的性能。
4、sql语句优化
从很多系统的应用来看,SQL语句的书写技巧和优劣往往是系统在使用一段时间后性能是否下降的关键因素。Oracle数据库sQL语句优化的原则如下:
4.1 优化排序操作
1.对常常进行排序和连接操作的字段建立索引,这部分参考本文第三部分。
2.书写sql语句尽量使用索引
如果sql语句where条件中的列没有建立函数索引,则避免使用该列的函数作为查询条件的一部分,此时可以考虑建立函数索引;避免在sql语句中使用“!_”和“”操作符;避免比较不匹配的数据类型;尽量去掉“IN”和“OR”,避免使用“NOTIN”;尽可能去掉where子句中IsNULL和IsNOTNULL。
4.2 尽量减少排序操作
1.用union all代替union
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。因为UNION ALL操作只是简单的将两个结果合并后就返回。
2.用where代替having
避免使用having子句,havmg只会在检索出所有记录之后才对结果集进行过滤。这个处理需要排序、总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
3.尽量减少使用group by对大数据量分组
使用group by对数据分组时,还要对记录进行排序操作,而排序是很耗资源的。如果仅仅为了查询某个字段重复的记录中的一条数据,可以用另外的字段标识出查询时主键最小的那条记录,而不要使用groupby字句
4.3 尽量减少数据库的I/O操作
过多的I/O操作会占用CPU时间、消耗大量内存,因此有必要对SQL的I/O进行优化。
1.尽量使用索引,减少全表扫描
2.注意where子句中的条件顺序,把能够过滤掉最大记录条数的条件写在where子句的末尾
3.选择合适的表名排列顺序,from子句中把记录数最小的表作为基础表放在最后边。
4.尽量减少表的访问次数。
5、结束语
对基于oracle的数据库系统来说,对数据库的效率进行优化,重点在于优化查询的效率,高效查询与低效率查询的差别是较大的.本文通过运用分析研究oracle优化技术的各个层面,并把这些技术方法运用到实际的信息系统优化中,使得系统的查询效率有较大的提升。