块是Oracle在数据文件上执行输入输出操作的最小单位。数据库系统在读取数据文件时,就是以块为单位把数据读取到数据高速缓存中。如用户使用Select查询语句从数据文件中读取100条记录。这100条记录并不是一次性都到数据高速缓存中,而是根据块的的大小来读取。在Oracle数据库性能调整中,合理配置块空间参数,也是其中一个重要的环节。数据库管理员在建立表、索引等数据库对象时,通过合理使用块空间参数,可以控制数据块的剩余空间,降低数据块的访问冲突,提高数据库性能。
Oracle数据库中,一个块就好像是一个面包,其会被分为好几个部分,每个部分都有不同的用途。如一部分被用来进行Update操作;一部分被用来进行Insert等其他操作等等。如何合理分配这个面包以优化数据库性能,这就是数据库管理专家所需要考虑的问题。
一、利用Pctfree参数控制行迁移现象。
Pctfree参数主要用来指定为Update操作预留的块空间比例,默认情况下,这个比例为10%。数据库管理员要更具Update操作的频率来合理调整这个比例。如果数据库管理员把这个比例设置为10%,如果当块剩余空间超过10%时,用户是可以进行数据插入、更新等操作的;但是,如果这个块的剩余空间不到10%时,插入操作将不能够使用这剩余的10%的块空间,而需要另辟领地。如果利用Update操作更新这个块中的记录时,这个剩余空间将会大大提高Update操作的性能。当然,前提是更新的内容不超过这个所预留空间的大小。否则的话,就会发生如下所说的行迁移现象。
用户在进行Update操作时,很容易会产生行迁移的现象。那么什么叫作行迁移呢?举一个例子跟大家说明一下。假设在数据库中有一张销售订单头的表格(在管理系统中,出于性能的考虑,往往把销售订单分为订单头与订单行进行设计)。在建立这个表段的时候,我们假设把Pctfree参数设置为10(数据库块大小默认为2K)。那么当数据库块的剩余空间低于200字节时,数据库就不允许再在这个数据库块上继续插入数据。这个块上的数据是专门为Update操作所预留的。在订单头表中往往会有一个备注字段,用来保存一些对于订单的说明。往往这个字段是允许为空的,而且可以存储大量数据。假设当用户插入订单时,一开始不输入备注内容,就保存了。但是,后来业务员发现需要在订单中添加备注信息,就输入了长长一串文字说明,其总长度已经超过了200字节。此时,因为这个块剩余的空间已经不能够存储这些数据,Oracle数据库就会将整行数据都移动到新的块上去。这就是行迁移现象的本质。很明显,行迁移现象会增加数据库服务器额外的开销,从而影响数据库的性能。
为了减少行迁移现象的发生,同时也不浪费宝贵的块空间,有如下建议。
一是根据表或者表段更新的频率来确定Pctfree参数。如果把Pctfree参数设置的比较小,虽然可以节省空间,但是如果Update操作比较频繁的话,很容易会导致行迁移。所以如果表更新的比较少时,宜采用小的Pctfree参数。相反,如果把Pctfree参数设置的比较大的话,可以在块空间中为其保留比较大的容量,为此可以提高Update性能。所以如果数据库对象更新操作比较多,则宜采用比较大的Pctree参数。
二是对于一些比较大的数据类型并且允许为空的字段,最好不要跟其他字段放在一起管理。像上面所提的备注字段,其可以跟另外一些允许为空、并且不怎么用的字段合成一张表,然后通过订单ID进行关联。如此就可以有效的避免行迁移现象,提高数据库性能。
3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/