Oracle Freelist和HWM原理及性能优化
近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些相关的讨论。本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等。而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析介绍。在原理探讨的基础上,介绍了常用的存储参数分析方法,并对所涉及的存储优化、HWM的优化和Freelist竞争优化作了说明。
缩略语:
ASSM:auto segement space management
HWM:high water mark
DBA:data block address
OLTP:online transaction process
OPS:oracle parallel server 网管网bitsCN_com
1.简介
Oracle的空间管理和存储参数管理是Oracle管理及优化的重要部分。FreeList作为Oracle底层存储参数中的核心参数,其行为方式对Oracle的存储管理及性能优化有重大影响,而现有的Oracle文档对此方面的内容比较缺乏。虽然Oracle 9i已出现了ASSM,但是作为深入调优对FreeList认识仍是必要的。 54com.cn
近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些相关的讨论。本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等。而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析介绍。在原理探讨的基础上,介绍了常用的存储参数分析方法,并对所涉及的存储优化、HWM的优化和Freelist竞争优化作了说明。
中国网管联盟www.bitscn.com
这些原理分析和性能优化都建立在探讨的基础上,限于篇幅和本人经验可能存在局限、偏差或谬误。 54com.cn
为了准确文中部分结构和字段的说明直接用英文描述。限于篇幅本文不对同样很重要的block结构作更深入的讨论,对OPS性能有重要影响的free list group本文也未提及,因此本文在单一free list group下讨论。对于block的深入讨论、free list group的介绍与优化以及PCTUSED和PCTFREE等重要参数的优化请参见参考文献和资料。
feedom.net
2.原理探讨
中国网管联盟www、bitsCN、com
FreeList作为一个Oracle存储管理的核心参数。其行为方式由Oralce内部控制,我们一般不需要掌握和控制。但是我们可能会遇到这些问题,当插入一条记录,会插入到那个块中?是使用新块,还是插入有数据的老块?段是什么时候扩展的,如何扩展的?表中只有一条记录,但是作一次select时代价却是上千个块,为什么?如果我们从原理上清楚了Oracle的存储管理方式,对相关这些问题的解决及性能优化就清晰自然了。 54ne.com
2.1 Oracle的逻辑储存结构 网管网bitsCN_com
Oralce的逻辑存储结构按表空间,段,区,块进行管理。块是Oracle用来管理存储空间的最基本单元,Oracle数据库在进行输入输出操作时,都是以块为单位进行逻辑读写操作的。区由一系列连续的块组成,Oralce在进行空间分配、回收和管理时是以区为基本单位的。段由多个区组成,这些区可以是连续的也可以是不连续的,一般情况下一个对象拥有一个段。表空间中容纳段和区。 中国网管联盟www_bitscn_com
在生成段的时候,会同时分配初始区(initial extents), 初始区的第一个块就格式化为segment header,并被用来记录free list描述信息、extents信息,HWM信息等。
54com.cn
中国网管论坛bbs.bitsCN.com
2.2 free list概念
feedom.net
free list是一种单向链表用于定位可以接收数据的块,在字典管理方式的表空间中,Oracle使用free list来管理未分配的存储块。Oracle记录了有空闲空间的块用于insert或Update。空闲空间来源于两种方式:1.段中所有超过HWM的块,这些块已经分配给段了,但是还未被使用。2.段中所有在HWM下的且链入了free list的块,可以被重用。free list具有下列属性 网管联盟www.bitsCN.com
l flag指示free list 被使用(1)或未使用(0)
l free list 链的首块的地址DBA(data block address)
l free list 链的尾块的地址DBA
free list 的信息通常保留在segment header中,这里给出segment header block dump片段加以说明:
nfl = 3, nfb = 1 typ = 1 nxf = 0
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
SEG LST:: flg: USED lhd: 0x03c00233 ltl: 0x03c00233
SEG LST:: flg: USED lhd: 0x03c00234 ltl: 0x03c00234
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
feedom.net
Segment Header:
==> nfl: number of free lists/block
==> nfb: number of free list blocks + segment header
==> typ: block type
==> nxf: number of transaction free lists
Segment List:
==> flg: flag USED or UNUSED the free list
==> lhd: head of free list
==> ltl: tail of free list
54ne.com
在每一个块中都有一个标记flg用来表明块是否链入了 free list链中。如果这个标志置上,该块中后向指针指向free list链中下一个块的DBA。如果当前块是链的最末尾的块,该后向指针值为0。这里给出位于free list上的block dump的片段 54ne.com
Block header dump: 0x03c00235
Object id on Block? Y
seg/obj: 0xe2d8 csc: 0x00.6264c61 itc: 1 flg: O typ: 1 - DATA
fsl: 1 fnx: 0x3c00234 ver: 0x01 54ne.com
==> Seg/obj Object ID in dictionary
==> csc SCN of last block cleanout
==> itc Number of ITL slots
==> flg O = On freelist , - = Not on freelist
==> typ 1 = DATA 2 = INDEX
==> fsl ITL TX freelist slot
==> fnx DBA of NEXT block on freelist 网管联盟www.bitsCN.com
举例来说如果有五个块在free list中,分别为A,B,C,D,E
就会形成segment header->A->B->C->D->E--|
同时segment header->E 中国网管联盟www_bitscn_com
2.3 free list类别
在段中存在3类free list, 即Master Freelists (MFL), Process Freelists (PrFL), 和 Transaction Freelists. 网管网bitsCN.com
2.3.1 Master Free List(公用空闲空间池):
54com.cn
每一个段中有一个Master free list,在段创建的时候自动生成。对于每一个段来说都有这样一个空闲空间池,对每个进程都是公用的,空闲空间就是位于master free list 的块上。由于Master free list是公用的,因此当多个进程同时插入行到同一个段上,master free list竞争使用程度就会增加。
中国网管联盟www、bitsCN、com
2.3.2 Process Free Lists 54com.cn
为了减少Master Free list的竞争问题, 引入了另一种free list叫做Process free lists, 根据sql命令 CREATE/ALTER 中的参数FREELISTS 创建. 这样多个free list 就可以分摊空闲空间的管理,以提高OLTP应用作高度并发插入和更新事务时空间分配管理的性能。通过指定CREATE TABLE / CLUSTER or INDEX的子句STORAGE的参数FREELISTS 来创建,例如: CREATE TABLE flg ( . . . .) . . . STORAGE ( ... FREELISTS 10 ...)。缺省的FREELISTS为1,此时不会创建Process free lists。当FREELISTS>=2时,创建Process free lists。
进程在使用process free list是根据进程的Oracle PID (Process ID)来选择的,公式如下:
select list entry = (PID % NFL) + 1
NFL : FREELISTS定义的Process free list个数
2.3.3 Transaction Free Lists
当Oracle需要时动态创建。一个Transaction Free List 是一种专门给某一个事务使用的free list. 每个段至少有16个transactions free lists, 并且这个值在需要时会增长,直到达到Segment Header块的大小限制。一个事务只有下面情况下会需要分配一个Tx Free Lists entry: 块中释放空间时(DELETE or UPDATE) 并且还不存在Tx Free Lists entry时。
中国网管联盟www、bitsCN、com
54ne.com
2.4 Free list行为
54com.cn
2.4.1 Freelist Link and Unlink 操作 中国网管联盟www.bitscn.com
Freelist 按后进先出队列(LIFO) 方式管理。也就是说最后被link到freelist的块拥有最先unlink的机会。当块中空闲空间增加到大于PCTFREE时,块放入freelist中。free list中的块可用来作update 或insert。 当块中没有足够的空间用于insert操作时并且使用空间大于PCTUSED,块就会从free list中移出。 feedom.net
在块在DELETE or UPDATE 操作之后,如果使用空间落到PCTUSED下,块再次link到free list中。每次块加入free list时,都是link到链表的头部。 网管联盟www.bitsCN.com
例如:考虑段中有120个块编号由1到120。其中有6个块在free list上并假设HWM是 80。(block实际使用DBA编号)
10->24->45->46->65->80-| 网管网bitsCN.com
现在作INSERT 操作,需要400 bytes空间。假设块10上空间不足,但块24上空间可用。现在数据插入到块 24 ,现在块24的剩余空间小于该表的PCTUSED。因此块 24 从free list链表中移出。PCTFREE and PCTUSED参数的目的就是用来控制数据块从free list的链表中移入/移出行为的。现在free lists象这样:
10->45->46->65->80-|
然后在同一事务中作DELETE同一个段的数据,使块 54 和 67落到PCTUSED下。现在这些块加入到free list链中。free list链现在象这样:
67->54->10->45->46->65->80-|
中国网管联盟www_bitscn_com
2.4.2 Transaction Free List 算法 中国网管联盟www.bitscn.com
扫描segment Header块中所有的Tx free list,检查是否还没有Tx free list entry分配给transaction, 如
没有合适的资源?快使用搜索试试~ 我知道了~
oracle数据库课件
共137个文件
gif:38个
ppt:31个
doc:12个
需积分: 6 9 下载量 75 浏览量
2011-06-03
17:44:22
上传
评论
收藏 11.62MB RAR 举报
温馨提示
oracle 分章节从安装配制到创建表空间与用户,逐步深入。。。
资源推荐
资源详情
资源评论
收起资源包目录
oracle数据库课件 (137个子文件)
IPconfig.ini.bak 299B
space.css 27KB
29ca4aea0bd679d3d539c9fc.css 17KB
master.css 14KB
mods.css 7KB
css.css 7KB
styles.css 5KB
master_top.css 4KB
tech_view.css 3KB
netconfig.dll 67KB
本地管理和字典管理的区别.doc 199KB
DBA用户登陆isqlpus的配置.doc 108KB
DBA用户登陆isqlpus的配置.doc 108KB
oracle练习题_20096391136.doc 68KB
storage.doc 46KB
sag_max_size的理解.doc 46KB
oracle的历史(1).doc 38KB
表空间管理的方法.doc 31KB
角色的验证.doc 27KB
oracle中g的理解(2).doc 25KB
开场白.doc 20KB
~$A用户登陆isqlpus的配置.doc 162B
IPfreeset.exe 20KB
111402100.gif 14KB
135436702.gif 13KB
101130708.gif 12KB
110809666.gif 9KB
1098111449.gif 8KB
101114605.gif 7KB
142235323.gif 6KB
114349329.gif 6KB
185623356.gif 5KB
101123798.gif 5KB
170655914.gif 4KB
1098110213.gif 4KB
logo-kz.gif 2KB
logo-kz.gif 2KB
logo-kz.gif 2KB
logo-kz.gif 2KB
logo-kz.gif 2KB
logo-kz.gif 2KB
post-jg.gif 2KB
index.gif 2KB
12_03.gif 1KB
BTn_so.gif 1KB
12_01.gif 1KB
12_05.gif 1KB
unlogo01.gif 927B
trackback.gif 864B
bubble.gif 860B
post.gif 855B
dushu_logo.gif 675B
article_elite4.gif 169B
dingyue.gif 149B
tuiding.gif 144B
link.gif 97B
bold.gif 97B
italic.gif 92B
ico1.gif 53B
c.gif 43B
itpubblog.gif 1B
txt_bottom.htm 942B
160x80.htm 515B
txt_ad_article_up.htm 414B
txt_ad_hengfu_up.htm 393B
ad.htm 338B
ad.htm 323B
pageview.htm 311B
GetHits.htm 21B
IPconfig.ini 237B
logo.jpg 33KB
142512909.jpg 28KB
p1.jpg 23KB
arc_next.jpg 16KB
104757399.jpg 5KB
logo.jpg 4KB
1098104620.jpg 4KB
110058602.jpg 4KB
NEWS_r3_c6.jpg 532B
NEWS_r3_c1.jpg 524B
NEWS_r3_c4.jpg 358B
fyb_25.js 168B
如何使用Oracle的BFILE-华育国际济南分校-山东IT培训网山东IT教育济南华育华育国际济南校区济南软件培训电脑培训IT培训JAVA培训J2EE培训_NET培训.mht 588KB
DBMS_LOB包使用和维护 - 想说就说(入住区) - 十万个为什么在线百科论坛Www_WSMbbs_Com.mht 515KB
理解ORACLE数据库字符集 - Jack Wu - JavaEye技术网站.mht 378KB
JAVA完全控制Oracle中BLOB CLOB说明 - - New - JavaEye论坛.mht 372KB
5_8_2 使用INTERVAL DAY TO SECOND类型 - 51CTO_COM.mht 347KB
ORACLE中LOB字段的使用和维护 — IT技术 - 赛迪网.mht 336KB
5_8_1 使用INTERVAL YEAR TO MONTH类型 - 51CTO_COM.mht 317KB
5_8_3 与时间间隔有关的函数 - 51CTO_COM.mht 315KB
通过JDBC操纵Oracle数据库LOB字段的分析 - 开心果 - 51CTO技术博客.mht 152KB
PL-SQL块定义部分之四LOB类型-冷酷到底-搜狐博客.mht 126KB
java语言操作Oracle数据库中的CLOB数据类型.mht 62KB
itpub.png 3KB
seccode.png 1KB
数据库结构(2)_2009428222343.ppt 1.81MB
数据库结构(2).ppt 1.81MB
数据库结构(2).ppt 1.8MB
oracle安装(3).ppt 1.5MB
数据库安全(2).ppt 1.08MB
共 137 条
- 1
- 2
资源评论
灰色轨迹
- 粉丝: 347
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- video_20240425_124410_edit.mp4
- IMG_20240425_120538.jpg
- My Complete Genome_6k Base-Pairs of Phenotype SNPs_Complete Raw Data.zip
- qt 的mqtt测试demo
- 移动应用开发教程-zip.zip
- mosquitto-2.018-install-windows-x64
- FTPServer FTP 服务器,绿色免安装,单文件
- 梦畅语音点名软件,上课点名
- 利用ADNI数据集和标签,在tensorflow框架上使用tensorlayer接口,通过架构u-net实现海马体的分割
- Kutools for Word v9.0 office word 插件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功