pctused, pctfree, pctincrease , 行迁移 & 行链接

虽然以前都有理解这些概念,但是今天偶尔看看网上的一些讨论,发现还是有一些不知道的东西 。

-------------------------------------------------------------- 


关于pctincrease与空间碎片回收的几点看法


1.PCTINCREASE>0 的时候SMON 会自动合并表空间中的碎片,等于0的时候只能手工回收
2.PCTINCREASE>0 造成extent不一致甚至可能因为几何增长的缘故造成一个next需要的饿空间太大
3.固定的next且较小可能造成表的存储段太离散,对查询很不利

我的意见是碎片能合并(回收)但是并不等于能利用:

而造成碎片的原因是因为表的存储的段离散而extent不一致所造成的
一旦PCTINCREASE>0 ,如果next较多会造成很多问题
你就算能合并碎片,但是这些空间也不能很好的利用,甚至很肯能利用率比较底

很简单的一个例子:
3+4=7 这是smon合并相临碎片 ,但是这时由于PCTINCREASE>0 的原因,有可能的话,
next extent已经为5了, 那么,7-5=2这部分就几乎永远浪费了(除非重建表空间)

所以,尽量保持在表空间所有表的next一致,然后PCTINCREASE=0
这样,就算smon不自动合并临近的碎片,这些碎片也能重复利用
如果能定期的手工合并,那当然也是可以的

注意: 这里所说的碎片完全是指表truncate或者drop后释放出来的空间
不是delete后留下来的空间,smon是不能解决delete所浪费的空间 

 

能让表释放空间只有3种情况:
1)drop table.........
2)truncate table .....drop storage....把表的数据删除只剩一个表头
3)alter table ..... deallocate unused  改变表的高水位

 


如果在表里删除一些行,然后往这个表里insert,当然会利用delete出来那些空间
为什么delete不能释放空间?
道理很简单,oracle下为对象分配存储空间是以extent作单位的,你删除的行可能是梅花插竹互相隔离的,如果每个block都有一些行删除了,也有

一些没删除的,你要oracle怎么释放(块是操作最小单位)?如果每次delete的时候都要oracle去检查一下有没有一个完整的范围可以释放,这又要

消耗额外的性能,而且是没必要的(因为能释放的机会太低了)

 

SMON 合并相邻碎片只针对tablespace的default storage。不针对table storage .

 

 

 


------------

Oracle9i 下忽略掉pctused , pctfree仍然有效,是因为9i下可以支持ASSM(auto segment space manangement),
导致pctused 失效, 相当于有多个pctused , 使用位图标示 2bit , 25%, 50%, 75% 等 。


------------

 


pctused =40 , 实际使用空间<40% , 可以用该块插入数据。
pctfree =10 , 插入数据到剩余空间只有10%时 , 不能在该块插入数据。 

 

行链接: 行链接产生在第一次插入数据的时候如果一个block不能存放一行记录的情况下。
、这种情况下,Oracle将使用链接一个或者多个在这个段中保留的block存储这一行记录,
比较容易发生在比较大的行上。比如Long, LOB等。
只能增大 db_block_size 来清除行链接 。

 

行迁移: 当一行记录初始插入的时候事可以存储在一个block中的,由于更新操作导致行长增加了
,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,Oracle将会迁移整
行数据到一个新的block中(假设一个block中可以存储下整行数据),Oracle会保留被迁移行的原始
指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。
pctfree设置过小是导致行迁移的一个原因。设置太大可能导致空间利用率低下 。

 

 

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

转载于:http://blog.itpub.net/35489/viewspace-555656/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值