ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 今天看了点pctfree和pctused的资料

今天看了点pctfree和pctused的资料

原创 Linux操作系统 作者:hawkk 时间:2010-03-01 16:25:34 0 删除 编辑

pctfree:用于指定BLOCK中必需保留的最小空间的比例。pctused:为一个百分比数值,当BLOCK中已经使用的空间降低到该数值以下时,该BLOCK才是可用的,达到或是超过这个数值的BLOCK是不可用的。

一般在控制具有独立segment结构的对象时,使用这两个参数来控制BLOCK的存储管理。

initrans:指定可以并发操作该表的事务的数目。

 用CREATE 命令的PCTUSED、PCTFREE、INITTRANS、MAXTRANS、FREELIST GROUPS 和FREELISTS参数来控制表、索引或簇的数据块中的空间使用。

可使用PCTFREE和PCTUSED参数控制数据块何时进入或离开表、索引或簇的可用清单。使用PCTFREE参数设置最大的阈值,以控制对将来的行的更新操作保留多少数据块空间。当某个数据块使PCTFREE装满时,ORACLE从相应段的可用清单中删除该块。如果你预计只有很少的更新操作会增加行的大小,则可将PCTFREE设置为较低的值(如5或者10),使得ORACLE填满每个块的更多的空间。但是,如果你预计更新操作将会经常增加行的大小,则将PCTFREE设置为较高的值(如20或30),使得ORACLE为已有行的更新操作保留更多的块空间;否则,将出现行链。可使用PCTUSED参数设置最小块的阈值来控制一个数据块应在何时放回到相应段的可用清单中。例如,所有段的缺省PCTUSED设置为40%,因此,当事务处理删除数据块中的行时,如果它只有39%是装满的,ORACLE将该数据块放回到相应段的可用清单中。如果你预计很少有删除操作,则可设置PCTUSED为较高的值(如60),当偶然的删除操作发生时,使数据块弹出可用清单。但是,如果你预计将PCTUSED 设置为较低的值(如40),使ORACLE不常产生块在表的可用空间中移进或移出的开销。

可使用INITRANS和MAXTRANS参数优化ORACLE如何在表、数据簇或索引的数据块中分配事务处理项。INITRANS参数确定为事务处理项预分配多少数据块头部的空间。当您预计有许多并发事务处理要涉及某个块时,可为相关的事务处理项预分配更多的空间,以避免动态分配该空间的开销。MAXTRANS参数限制并行使用某个数据块的事务处理的数量。当您预计有许多事务处理将并行访问某个小表时,则当创建表时,应设置该表的事务处理项预分配更多的块空间,较高的MAXTRANS 参数值允许许多事务处理并行访问该表INITRANS和MAXTRANS 参数的设置可能相应低一些(如分别为2和5)。使用这样的设置,很少为事务处理项保留窨,使该表数据块的更多空间用于数据。

可使用STORAGE子句的FREELIST GROUPS 参数控制段的可用清单组的数据量。使用FREELISTS 参数设置每组中可用清单的数量。

 

 

 

 

关于表属性PCTFREE的设置
 

为了便于理解,先看看这些概念的意思

在字典管理时使用:
为了便于理解,我们可以把整个块看成是2室1厅,其中1室占10%(pctfree)其中2室占40%(pctused),厅占50%,我们的仓库的门上贴上(空,满)两个状态,一开始状态为空,那么当我们第2室的空间一直在放东西,但该房间全部填满(40%的空间),然后厅也装满了(50%的空间),这时再装的话,门上贴上满的状态,这时只有减少某个货物的空间(UPDATE),或者拿走某个货物(DELETE),一直把厅里的所有货物都被清理后,门的状态就边成空的状态,这时,就可以从外面再装货物了。

这样设置的好处就是,假设你有很多仓库空着,但是你某个仓库,频繁的装入,卸载货物,始终没有把2室一厅添满,这样,所有的人都堆在该仓库中,那该仓库管理员是不是要累死,所以就要通过PCTFREE,PCTFREE,FREELIST来均衡到不同的仓库中。

设置pctused,pctfree的用处

为了避免行迁移和行链接,要均衡进出freelist(设置状态满/空)的频率,太频繁不好,状态一次也不变也不好
ORACLE通常通过牺牲空间来避免行迁移和行链接,也就是pctfree,所以我们考虑性能时,看既要尽量减少行迁移的发生,就是由于更新使原来行增成(比如VARCHAR2),我们可以理解为2号室加客厅都已经将近放满了,而这次更新使得空间将容不下整个2室一厅,也就是说更新变大的空间甚至搭上1号室还不够,就会产生行迁移的情况,所以更新变大的情况经常发生时,建议把1号室变大(也就是要用大PCTFREE)
那么如果pctused设置很大的情况下,这样就很容易有机会状态为空(进freelist),所以对(insert)有好处,因为他插入成功的几率很高,但是由于频繁插入,使得空间很快把厅(1-pctfree-pctfree)也装忙,当要update时,很容易行迁移,所以pctused适合频繁要插入的数据,当然有些删除也不错,这样也有更多的机会再次低于pctused,使得进入freelist.但我觉得太频繁的一下insert 一大批数据达到pctfree,状态为满,然后马上又删除大量的行,使得状态置为空也不好,频繁操作freelist,比如insert into tab 7K数据,紧接着delete tab 7k,这样频繁的操作就不合适了pctused很高了.

那么高pctfree的作用正好相反,他比较合适频繁更新的操作,因为,如果更新变大,也不容易行迁移,而且会大大利用pctfree的空间不至于浪费.如果更新变小,还可以便于INSERT操作.

那么如果有频繁删除(取货)或更新变小,使得很容易把状态至为空(进freelist)
pctfree和pctused的使用

  1. 较高的pctfree的值大约在20到25之间,较低的值为4或5,可用于静态表或只读表。
  2. 除非要严格地管理可用空间,否则不要设置pctused超过40或50。
  3. 一般这两个值地和不能达到90,否则会使Oarcle将更多地时间花费在处理空间利用上。下面是几个参考:
  4. pctfree 5,pctused 40 适合于静态表或只读表。
  5. pctfree 10,pctused 50 适合插入行后,更新活动不会增加已有行地长度地综合性OLTP系统。
  6. pctfree 20,pctused 40 适合于插入行后,更新活动会增加已有行地长度地OLTP系统。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7698696/viewspace-628293/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-21

  • 博文量
    24
  • 访问量
    14939