网上找了半天,还是有点迷糊
如果设置pctfree=20%,pctused=40%, 最初数据块在freelist里面,随着不停的插入数据出现一种情况 80%>已用空间>40%那么这个时候根据pctfree来看是可以插入数据,而根据pctused来看数据块又要被标记成不可用那这时候数据块到底如何决定是否移出freelist呢?  谁能帮忙解释清楚啊 。

解决方案 »

  1.   

    把BLOCK 想成一個水杯。侍者把水倒入放在我們面前的水杯,要多滿呢,我們要求他倒 9 分滿好了,這時候 PCTFREE 代表著設定為 10 ,意思就是說,當 BLOCK 使用到達 90% 的時候,就不可以在使用了,這個 BLOCK 應該從 FREELIST 列表中移除 (un-link) 。為何要保留 10% 的空間呢?這是為了提供 update 資料時所可能增加的空間使用,如果空間保留的太小,就容易發生 row chaining 。 PCTUSED 代表著這杯水什麼時候可以添加,假設 PCTUSED 為 40 ,代表當我們把水杯的水喝到剩下 40% 以下時,侍者就會知道需要加水了。你想想看,如果說在餐廳裡妳每喝一口水侍者就來加水,你會不會覺得很煩,對餐廳來說,也要派很多人不斷幫每桌客人加水,這生意還能做嗎?所以說, PCTUSED 代表著 re-link 回 FREELIST 的意義,如果說 PCTUSED 設的太大,例如 70 好了,代表這杯水你隨便喝一口侍者就要來加水了,這隱含的意義是,這個杯子的利用率增加,但是侍者頻繁的服務造成了負荷 (I/O Overhead) 。 PCTUSED 設小一點,例如 10 ,代表當水喝到剩下 10% 的時候 ( 如同 DELETE 事務操作 ) ,才須要放回 FREELIST ,代表可以加水了 ( 如同 INSERT 事務操作 ) 。 簡單的說,如果希望儲存空間發揮最大使用效益,可以把PCTUSED設大一點,相反的,如果想要提高IO效能,應該把PCTUSED設定小一點。
      

  2.   

    这个比喻很形象,按照加水的理解,是不是下面这个意思? 就是说当数据块在freelist中的时候,即使超过了40%,只要没有超过1-pctfree,就仍然可以insert而pctused则是用来控制 是否回到freelist?  
      

  3.   

    上面的同志比喻很形象。
    http://blog.csdn.net/huang_tg/archive/2010/07/09/5723596.aspx
    http://blog.csdn.net/huang_tg/archive/2010/07/08/5722005.aspx
    可以看下两篇文章,里面有实验,结合看一下应该能懂
      

  4.   

    在非ASSM表空间中,pctused控制块何时回到freelist,pctfree控制块何时离开freelist
      

  5.   

    现在推荐使用ASSM,在这种管理模式下,pctused已作废,只通过pctfree来决定每个块预留多少空间用于更新