在分区表上增加PCTFREE

时间:2017-06-30 11:11:15

标签: oracle ddl

我们必须增加表的PCTFREE属性以检查它是否允许2个事务可以在同一个表上运行并更改表数据而不提交更改。我读到它的问题是增加PCTFREE可以帮助消除死锁

alter table tablename modify default attributes PCTFREE 50;

结果显示表已被更改,但是当我检查dba_tables时,它将PCTFREE的值显示为null。有没有办法将它增加到更高的值。

这是一个我们无法增加分区默认属性的错误吗?表

2 个答案:

答案 0 :(得分:0)

首先,您需要了解PCTFREE是什么。在一个非常简单的定义中,您可以定义PCTFREE参数,用于将可能reserved的块的百分比设置为updates到该块中已包含的行。例如,假设您在CREATE TABLE语句中指定了以下参数:

  

PCTFREE 20

这表示用于此表的数据段的每个数据块的20%将保持空闲,并且可用于对每个块内已有的行进行可能的更新。 更大的PCTFREE具有以下效果:

  

•为将来更新现有表格行保留更多空间

     

•对于相同数量的插入数据可能需要更多块(插入   每个块的行数更少)

这就是你发现表现改善的原因。

其次,要增加PCTFREE,如果您决定不使用默认值,则必须牢记以下要点

  

•PCTFREE和PCTUSED的总和必须等于或小于100.

     

•如果总和等于100,那么Oracle会尝试保留不超过100   PCTFREE的可用空间和处理成本最高。

     

•100与PCTFREE和之和之间的差异越小   PCTUSED(如PCTUSED of 75,PCTFREE of 20),更有效的空间   使用是一些性能成本。

因此,简单地改变PCTFREE 50将不会带来更多优势。根据您尝试在数据库上执行的活动,您必须设置这些值。请阅读此处了解不同的场景,您必须使用的所有值。 Here

最好的方法是删除并创建具有修改值的表格:

CREATE TABLE  players
        (code  NUMBER(10) PRIMARY KEY,
         lastname  VARCHAR(20),
         firstname VARCHAR(15),
         position  VARCHAR2(20), 
         team VARCHAR2(20))
      PCTFREE 10   
      PCTUSED 40
      STORAGE 
         (INITIAL 25K
          NEXT 10K
          MAXEXTENTS 10
          MINEXTENTS 3);

答案 1 :(得分:0)

对于分区表,dba_tables.pct_free始终为空。默认的pctfree显示在dba_part_tables.def_pct_free