我们必须增加表的PCTFREE属性以检查它是否允许2个事务可以在同一个表上运行并更改表数据而不提交更改。我读到它的问题是增加PCTFREE可以帮助消除死锁
alter table tablename modify default attributes PCTFREE 50;
结果显示表已被更改,但是当我检查dba_tables时,它将PCTFREE的值显示为null。有没有办法将它增加到更高的值。
这是一个我们无法增加分区默认属性的错误吗?表
答案 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
。