在创建无参数的存储过程表的过程中,参数initrans是什么意思

oracle中参数PCTFREE和PCTUSED的含义_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
oracle中参数PCTFREE和PCTUSED的含义
&&oracle中参数PCTFREE和PCTUSED的含义
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢1. PCTFREE
要形容一个 BLOCK 的运作,我们可以把一个 BLOCK 想成一个水杯。侍者把水倒入放在我们面前的水杯,要多满呢,我们要求他倒 9 分满好了,这时候 PCTFREE 代表着设定为 10 ,意思就是说,当 BLOCK 使用到达 90% 的时候,就不可以在使用了,这个 BLOCK 应该从 FREELIST 列表中移除 (un-link) 。为何要保留 10% 的空间呢?这是为了提供 update 数据时所可能增加的空间使用,如果空间保留的太小,就容易发生 row chaining 。
2. PCTUSED
PCTUSED 代表着这杯水什么时候可以添加,假设 PCTUSED 为 40 ,代表当我们把水杯的水喝到剩下 40% 以下时,侍者就会知道需要加水了。你想想看,如果说在餐厅里妳每喝一口水侍者就来加水,你会不会觉得很烦,对餐厅来说,也要派很多人不断帮每桌客人加水,这生意还能做吗?所以说, PCTUSED 代表着 re-link 回 FREELIST 的意义,如果说 PCTUSED 设的太大,例如 70 好了,代表这杯水你随便喝一口侍者就要来加水了,这隐含的意义是,这个杯子的利用率增加,但是侍者频繁的服务造成了负荷 (I/O Overhead) 。 PCTUSED 设小一点,例如 10 ,代表当水喝到剩下 10% 的时候 ( 如同 DELETE 事务操作 ) ,才须要放回 FREELIST ,代表可以加水了 ( 如同 INSERT 事务操作 ) 。
简单的说,如果希望储存空间发挥最大使用效益,可以把PCTUSED设大一点,相反的,如果想要提高IO效能,应该把PCTUSED设定小一点。
FREELIST 储存着可使用的 BLOCK 信息,当 BLOCK 被 DELETE 数据使用量下降到 PCTUSED 时,就会重新放置到 FREELIST 上,让其它交易新增数据使用。 FREELIST 存放在 TABLE/INDEX 的 Segment Header 中,他管理着所有可以新增数据的 BLOCK 信息。想想,如果有多人同时要新增数据而要求 FREELIST 提供可使用的 BLOCK 信息, FREELIST 不就也会成为另一个 Overhead ?所以依照 TABLE 使用的需求调整 FREELIST 的数量也是 IO Tuning 的一个重点。
这个参数在ASSM中已经没有用了,只剩下PCTFREE是生效的了。
3. INITRANS
INITRANS 指的是一个 BLOCK 上初始预分配给并行交易控制的空间 (ITLs)
( 当 BLOCK 上某笔 ROW 被交易更新锁定时,会在 BLOCK header ITL allocate 一个锁,当下一个交易要更新同一笔 row 时,就会发现他已经被先前的交易持有锁了,会先去检查该交易是否 active? 如果是,后来的该笔交易就会被 blocking ,等待 ) 如果一个表格需要同时有大量交易存取,你应该设定 INITRANS 大一点,可以减少 ITL 还要动态扩充的 Overhead 。
For tables INITRANS defaults to 1 for indexes 2
4. MAXTRANS
MAXTRANS 指的是如果 INITRANS 空间不够用了,就会自动扩展 ITL ,直到最大值也就是 MAXTRANS 值为止,预设是 255 。但是,如果 BLOCK 空间已经不足,也有可能无法持续扩充到 255 个 ITS 空间喔。
本文为转载,本来想自己写一篇的,但是发现这篇已经写得够好了。发现没有版权,就不多费笔墨。谢谢原创作者。
阅读(...) 评论()1255人阅读
oracle(15)
每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23~24 字节的存储空间。注意,对于Oracle&10g,MAXTRANS
则会忽略,所有段的MAXTRANS 都是255。
也就是说,如果某个事物锁定了这个块的数据,则会在这个地方记录事务的标识,当然那个事务要先看一下这个地方是不是已经有人占用了,如果有,则去看看那个事务是否为活动状态。如果不活动,比如已经提交或者回滚,则可以覆盖这个地方。如果活动,则需要等待(闩的作用)
所以,如果有大量的并发访问使用的这个块,则参数不能太小,否则资源竞争将导致系统并发性能下降。
测试了一下ORACLE 并发事务的时候的块分配和ITL 管理,
略去大部分的测试过程,大概的结果小结如下:
1. INITRANS =1 时 并发多个INSERT 事务(本次测试最多5个)的时候并不会由于ITL的争用而等待组塞,ORACLE 采取的策略是每个INSERT事物分配不同的一些块来使用,这样各个会话之间就不会产生冲突,除非段没有多余的块(次种情况与本次的主题无关).
2.INITRANS =1 时 并发多个UPDATE事务(本次测试最多7个)的时候也不会由于ITL的争用而导致等待产生,此时ORACLE除了使用默认的ITL之外,另外动态扩展所需要的ITL,紧紧在非常极端的情况下才会出现等待,(当然应用层面的死锁或等待与本主题无关)。
1) 该BLOCK没有FREE空间了,注意FREE参数的设置不能太小。
2) 该块使用的ITL总数,超过该块允许的ITL的最大值min(round(block_size*0.5/24) - 2 ,255) 。
&&&要达到这样的极端情况实际的生产情况是很难的,应该比业务SQL的死锁出现的概率更小。
小结:创建表的时候除非已经清楚,大部分的情况下没有必要调整INITRANS参数,通常1-4以下足够用了,INITRANS 设置非常大的时候ORACLE 有出现坏块的BUG,另外FREE&参数倒是要注意不能随意改小,除非你已经很清楚更改的后果.
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:49117次
排名:千里之外
原创:30篇
转载:39篇
(1)(1)(5)(3)(8)(1)(8)(5)(4)(6)(1)(1)(3)(3)(2)(4)(5)(2)(4)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'2016年11月 Oracle大版内专家分月排行榜第三2016年10月 Oracle大版内专家分月排行榜第三2016年9月 Oracle大版内专家分月排行榜第三2016年8月 Oracle大版内专家分月排行榜第三2016年7月 Oracle大版内专家分月排行榜第三2016年6月 Oracle大版内专家分月排行榜第三
2017年1月 总版技术专家分月排行榜第二
2016年12月 总版技术专家分月排行榜第三
2016年7月 Oracle大版内专家分月排行榜第二2016年6月 Oracle大版内专家分月排行榜第二
2016年7月 Oracle大版内专家分月排行榜第二2016年6月 Oracle大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 创建无参数的存储过程 的文章

 

随机推荐