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会被忽略