如题,建表时pctfree和pctused的设置应该遵循什么原则呢?对于频繁insert,update的表和只select很少insert,update的表,这两个参数应该设置为多少合适?小弟基础不太好,还望高手详解,谢谢!~~

解决方案 »

  1.   

     • PCTFREE
        – Default 10
        – Zero if no UPDATE activity
        – PCTFREE = 100 × upd / (average row length)
     • PCTUSED
        – Default 40
        – Set if rows deleted
        – PCTUSED = 100 – PCTFREE – 100 × rows × (average row length) / blocksize
        其中,
    upd : the average amount added by updates, in bytes。This is determined by 
        subtracting the average row length of  intercurrent average row length;
        average row length:在运行了analyize命令之后,这个值可以从dba_tables中的avg_row_len列中获得。
         
    rows : the number of rows to be deleted before free list maintenance occurs。
      

  2.   

    对于数据块的认识:     
        
              。数据块的大小有DB_BLOCK_SIZE决定,并且只有通过重建数据库来得到调整。空间计算的根据来自于数据块。     
        
              。数据块由数据块头,数据区组成。数据区的使用由PCTFREE,PCTUSED控制。当INSERT发生时,     
        
              PCTFREE决定了该块所能容纳的最多的数据,即,剩余空间占数据块实际空间的百分比不小于PCTFREE。     
        
              空间估算中PCTFREE是很一个很重要的参数。     
        
      对于在表上进行的事务(TRANSACTION)类型要有一个清晰的认识,因为这会帮助如何更好的确定PCTFREE   &   PCTUSED。     
        
      例如:     
        
              如果PCTFREE的值太大,记录又可能很长,这会引起行链接(ROW-CHAINING),同时空间利用率也不高;     
        
              如果PCTFREE的值太小,会影响块数据记录的增长,容易引起行迁移(ROW-MIGURATING);     
        
              如果PCTUSED的值太大,空间上似乎没什么问题,但数据块的操作上又有潜在的性能问题,因为数据块需要在     
        
                      FREELIST上反复搬动;     
        
              如果PCTUSED的值太小,则又出现了空间利用率不高的问题。     
        
        
        PCTFREE   &   PCTUSED表示的是DB_BLOCK_SIZE减去数据块头后的百分比值   
        
      

  3.   

    只select,pctfree可以设为0
    这些参数也可以在表建好后再改,然后move tablespace