Oracle数据库性能优化技术(3)

时间:2010-10-18   来源:   网友评论:0   人气: 637 作者:

        四、 oracle数据库性能优化方法

        1)建立索引

        表格是关系型数据库的基础,数据库中的所有信息都是以表格的形式来存放的。由于Oracle 数据库是一个大型的数据库,存储着大量的数据信息。它使用一个内置的优化器来决定检索数据的最快方法。在Oracle 的性能优化中,适当的建立索引是很关键的。

        (a) 低选中率的列建立位映射索引:为那些唯一度很低的列创建位映射索引, 位映射索引能够极大地帮助改善读性能。

        (b) 为不平衡的B* 树索引创建反转关键字索引:反向键索引是一种B* 树索引。在这种索引方式中,关键字值的字节是按照相反的顺序存储的。

        (c) 要建立合适的索引,还必须考察select 和where 子句,因为这是查询优化的首要焦点。当索引包括多列时,就构成了复合索引。

        使用索引可以提高检索数据的效率, 但并不是说只要有索引,检索的效率就会提高,添加索引是以增大存储量和降低插入性能为代价的。这里存在着“百分之二十”的规则,当从表格中选取的行超过总行数的百分之二十时,表上的索引不会提高检索的速度,因此在创建索引时要考虑到这一点。不合适的索引将会导致查询性能的严重降低,应在SQL 语句中将这索引隐藏。

         2)优化SQL语句

        SQL 是一种非过程化语言, 它一次处理的是一个记录集合,对数据提供自动导航。SQL 允许用户在高层的数据结构上工作,而不是对单个记录进行操作。SQL 不要求用户指定对数据的存取方法,而是使用查询优化器,由系统决定对指定数据存取的最快速手段。当关系数据库的设计者在关系表上定义了索引之后,系统会自动地利用索引进行快速检索,用户不需知道表上是否有索引以及表有什么类型的索引等细节。在SQL 语句中,应注意以下几点:①在where 子句中,若使用and 条件,应将最有可能导致查询失败的条件放前面;若使用or 条件,应将最有可能致查询失败的条件放在后面;②进行多表查询时, 应将返回行少的表放在from 子句的后面,在where 子句中, 应将记录多的表的字段写在左边。值得注意的是,对那些写得不好的小SQL 语句进行优化更为重要,因为这些小的SQL 语句每天可能被访问成千上万次。

       3)碎片问题

         碎片是由于同一磁盘的各个部分分散在磁盘的不同区域产生的。在删除磁盘上的文件和添加新文件时会产生碎片。碎片的大量存在减慢了磁盘访问的速度,并降低了磁盘操作的综合性能。为了预防碎片,Oracle 提供两类表空间:①字典管理的表空间。在这种方式下,扩展管理是通过数据字典完成的。这是一种常规的和缺省的表空间类型;②本地管理的表空间,扩展管理是表空间自身完成。一旦选择了一个指定的类型,就不能更改。在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 数据库中有很多参数的设置是来定义物理存储、资源利用的,这些参数设置得是否合适也就与系统的效率直接有关,参数的调整实际上就是要调整资源的利用效率


 

文章评论