PCTUSED:是指当块里的数据低于多少百分比时,又可以重新被insert,一般默认是40,即40%,即:当数据低于40%时,又可以写入新的数据,这个时候处在下降期
PCT_USED NUMBER Minimum percentage of used space in a block; NULL for partitioned tables
数据块的最小的使用比例
Oracle会根据所操作块的PCTUSED属性判定此块是否可以被再次使用。PCTUSED为40表示当块中的可用容量达到60%时,块中插入了40%的数据
此块被标记为可用,而PCTUSED为80表示当块中的可用容量只要达到20%时,即可被标记为可用,答案显而易见
pctfree:用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度。
freelist:可用列表是表中的一组可插入数据的可用块。
pctused与pctfree控制数据块是否出现在freelist中,
pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,
该数据块从freelist中去掉,当块由于dml操作free space大于pct_used设置的空间时,该数据库块将
被添加在freelist链表中。
4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
本地管理表空间(Locally Managed Tablespace简称LMT):8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。
字典管理表空间(Dictionary-Managed Tablespace简称DMT):8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。
动段空间管理(ASSM):它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储
本质.
① MSSM:由你设置freelists、freelist groups、pctused、pctfree、initrans等参数来控制如何分配、使用段中的空间
② ASSM:你只需控制一个参数pctfree,其他参数即使建了也将被忽略
PCTFREE为10的时候,一个block的90%的空间可用来存放数据,
而PCTFREE为40时,只有60%的空间可以用来存放数据,而总数据量不变,所以要分配更多的block来存放数据。
测试在ASSM下pctused ,inittrans等参数无法修改:
SQL> select username,default_tablespace from dba_users where username='SCAN';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCAN EXAMPLE
SQL> select tablespace_name, extent_management,segment_space_management from dba_tablespaces where tablespace_name='EXAMPLE';
TABLESPACE_NAME EXTENT_MAN SEGMEN
------------------------------ ---------- ------
EXAMPLE LOCAL AUTO
SQL> create table t1 as select * from dba_users;
表已创建。
SQL> set linesize 200
SQL> select PCT_FREE,PCT_USED,freelists,freelist_groups,ini_trans,max_trans ,BLOCKS,AVG_ROW_LEN,CHAIN_CNT from user_tables where table_name='T1';
PCT_FREE PCT_USED FREELISTS FREELIST_GROUPS INI_TRANS MAX_TRANS BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- --------------- ---------- ---------- ---------- ----------- ----------
10 1 255
SQL> alter table t1 pctused 50;
表已更改。
SQL> select PCT_FREE,PCT_USED,freelists,freelist_groups,ini_trans,max_trans ,BLOCKS,AVG_ROW_LEN,CHAIN_CNT from user_tables where table_name='T1';
PCT_FREE PCT_USED FREELISTS FREELIST_GROUPS INI_TRANS MAX_TRANS BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- --------------- ---------- ---------- ---------- ----------- ----------
10 1 255
SQL> alter table t1 pctfree 20;
表已更改。
SQL> select PCT_FREE,PCT_USED,freelists,freelist_groups,ini_trans,max_trans ,BLOCKS,AVG_ROW_LEN,CHAIN_CNT from user_tables where table_name='T1';
PCT_FREE PCT_USED FREELISTS FREELIST_GROUPS INI_TRANS MAX_TRANS BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- --------------- ---------- ---------- ---------- ----------- ----------
20 1 255
可以看到pct_used 参数无法修改:
SQL> select PCT_FREE,PCT_USED,freelists,freelist_groups,ini_trans,max_trans ,BLOCKS,AVG_ROW_LEN,CHAIN_CNT from user_tables where table_name='T1';
PCT_FREE PCT_USED FREELISTS FREELIST_GROUPS INI_TRANS MAX_TRANS BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- --------------- ---------- ---------- ---------- ----------- ----------
20 20 255
SQL> alter table t1 maxtrans 300;
alter table t1 maxtrans 300
*
第 1 行出现错误:
ORA-02209: 无效的 MAXTRANS 选项值
SQL> alter table t1 maxtrans 256;
alter table t1 maxtrans 256
*
第 1 行出现错误:
ORA-02209: 无效的 MAXTRANS 选项值
SQL> alter table t1 maxtrans 254;
表已更改。
SQL> select PCT_FREE,PCT_USED,freelists,freelist_groups,ini_trans,max_trans ,BLOCKS,AVG_ROW_LEN,CHAIN_CNT from user_tables where table_name='T1';
PCT_FREE PCT_USED FREELISTS FREELIST_GROUPS INI_TRANS MAX_TRANS BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- --------------- ---------- ---------- ---------- ----------- ----------
20 20 255
INI_TRANS可以修改 但是MAX_TRANS会被忽略