Oracle Freelist和HWM原理探讨及相关性能优化
时间:2007-12-23 来源:不详 作者:迈克DB
文章摘要:
近期来,FreeList的重要作用逐渐为OracleDBA所熟悉,网上也出现一些相关的讨论。本文以FreeList为线索对Oracle的存储治理的原理进行较深入的探讨,涉及Oracle段区块治理的原理,FreeList算法等。而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析介绍。在原理探讨的基础上,介绍了常用的存储参数分析方法,并对所涉及的存储优化、HWM的优化和Freelist竞争优化作了说明。
缩略语:
ASSM:autosegementspacemanagement
HWM:highwatermark
DBA:datablockaddress
OLTP:onlinetransactionprocess
OPS:oracleparallelserver
1.简介
Oracle的空间治理和存储参数治理是Oracle治理及优化的重要部分。FreeList作为Oracle底层存储参数中的核心参数,其行为方式对Oracle的存储治理及性能优化有重大影响,而现有的Oracle文档对此方面的内容比较缺乏。虽然Oracle9i已出现了ASSM,但是作为深入调优对FreeList熟悉仍是必要的。
近期来,FreeList的重要作用逐渐为OracleDBA所熟悉,网上也出现一些相关的讨论。本文以FreeList为线索对Oracle的存储治理的原理进行较深入的探讨,涉及Oracle段区块治理的原理,FreeList算法等。而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析介绍。在原理探讨的基础上,介绍了常用的存储参数分析方法,并对所涉及的存储优化、HWM的优化和Freelist竞争优化作了说明。 dedecms.com
这些原理分析和性能优化都建立在探讨的基础上,限于篇幅和本人经验可能存在局限、偏差或谬误。
为了准确文中部分结构和字段的说明直接用英文描述。
限于篇幅本文不对同样很重要的block结构作更深入的讨论,对OPS性能有重要影响的freelistgroup本文也未提及,因此本文在单一freelistgroup下讨论。对于block的深入讨论、freelistgroup的介绍与优化以及PCTUSED和PCTFREE等重要参数的优化请参见参考文献和资料。
2.原理探讨
FreeList作为一个Oracle存储治理的核心参数。其行为方式由Oralce内部控制,我们一般不需要把握和控制。但是我们可能会碰到这些问题,当插入一条记录,会插入到那个块中?是使用新块,还是插入有数据的老块?段是什么时候扩展的,如何扩展的?表中只有一条记录,但是作一次select时代价却是上千个块,为什么?假如我们从原理上清楚了Oracle的存储治理方式,对相关这些问题的解决及性能优化就清楚自然了。
2.1Oracle的逻辑储存结构
Oralce的逻辑存储结构按表空间,段,区,块进行治理。块是Oracle用来治理存储空间的最基本单元,Oracle数据库在进行输入输出操作时,都是以块为单位进行逻辑读写操作的。区由一系列连续的块组成,Oralce在进行空间分配、回收和治理时是以区为基本单位的。段由多个区组成,这些区可以是连续的也可以是不连续的,一般情况下一个对象拥有一个段。表空间中容纳段和区。
织梦好,好织梦
在生成段的时候,会同时分配初始区(initialextents),初始区的第一个块就格式化为segmentheader,并被用来记录freelist描述信息、extents信息,HWM信息等。
2.2freelist概念
freelist是一种单向链表用于定位可以接收数据的块,在字典治理方式的表空间中,Oracle使用freelist来治理未分配的存储块。Oracle记录了有空闲空间的块用于insert或Update。空闲空间来源于两种方式:1.段中所有超过HWM的块,这些块已经分配给段了,但是还未被使用。2.段中所有在HWM下的且链入了freelist的块,可以被重用。freelist具有下列属性
lflag指示freelist被使用(1)或未使用(0)
lfreelist链的首块的地址DBA(datablockaddress)
lfreelist链的尾块的地址DBA
freelist的信息通常保留在segmentheader中,这里给出segmentheaderblockdump片段加以说明:
上一篇:字符集问题的初步探讨 下一篇:SQLServer数据库安全规划全攻略
文章评论
共有位Admini5网友发表了评论 查看完整内容