Oracle学习(1)――BLOCK

BLOCK

BLOCK是 ORACLE下I/O的最小单位(换句话说,一次读出的数据至少是一个BLOCk)。
   ORACLEBLOCk是由一个或多个OS BLOCk组成的。
   ORACLEBLOCK是在创建TABLESPACE的时候就划分好的,之后分配使用。
   ORACLE的初始化参数 DB_BLOCK_SIZE就是指定BLOCK大小的。 
 
   BLOCK的结构:  HEADER, FREE SPACE , DATA SPACE。
   HEADER部分和 DATA SPACE从BLOCK的两头向中间扩展,    中间未用的部分就是 FREE SPACE。
 
   4个参数控制着BLOCK的分配:INITTRANS, MAXTRANS, PCTFREE, PCTUSED。
   描述如下: BLOCK下包含数据允许最大的操作事务个数取决于 BLOCK某种空间( TRANSACTION SLOT)的分配。 允许的事务越多,需要分配越多的 TRANS SLOT。 INITTRANSMAXTRANS就是规定这个TRANSACTION SLOT的。
 
   PCTFREEPCTUSED是规定DATA SPACE和FREE SPACE之间关系的: 当一个空的 BLOCK开始写入数据后,DATA SPACE部分越来越大,同时, FREE SPACE越来越小。当数据写入到一定程度时, FREE SPACE占全部空间等于 PCTFREE时,这个BLOCK就不能再写入新的记录了。 剩下的这部分 (PCTFREE*DB_BLOCK_SIZE)空间用于给现有记录 update使用。后续的insert会导致从FREE BLOCK列表中拿另外一个BLOCK完成。BLOCK中记录通过delete时,BLOCK的DATA SPACE逐渐减少。
   如果 BLOCK此时是一个FULL BLOCK,DATA SPACE降低置DB_BLOCK_SIZE*PCTUSED后, ORACLE就认为这个 BLOCK是个FREE的BLOCK,就会放入FREE LIST ,可以继续插入数据了。可见, PCTFREE和PCTUSED是两个水位线,用来限制 FREE、USED两个空间分隔线的位置的。
 
   有两种 BLOCK的空间管理模式:AUTO和MANUL。
   使用前者, ORACEL会自动管理INITTRANS, MAXTRANS, PCTFREE, PCTUSED 这几个参数。
   如下是创建一个 AUTO管理的TABLESPACE:
     CREATE TABLESPACE data02
         DATAFILE '/u01/oradata/data02.dbf' SIZE 5M
         EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K
         SEGMENT SPACE MANAGEMENT AUTO;
———————————————————————————————————————————————         
extent
    EXTENTS是若干连续的 BLOCKS,ORACLE每次给SEGMENT扩空间的时候,是以 EXTENTS为单位的。
    在建 TABLE/INDEX时几个参数决定了EXTENTS的分配特性: INITIAL EXTENT(单位: K)、NEXT EXTENTS(单位:K)、PCT INCREASE、  MIN EXTENTS(单位:个 )、MAX EXTENTS(单位:个)。
     基本过程是这样:当 SEGMENT创建时,分配的第一个EXTENTS  大小为 INITIAL EXTENT参数指定的大小。
     如果 SEGMENT的空间不够,会分配第2个、第3个...EXTENTS。
     2个EXTENT的大小为NEXT EXTENTS,
     3个的大小为NEXT EXTENTS*(1+PCT INCREASE),
     每次增加 PCT INCREASE,以此类推。 
     每个 TABLESPACE都有一个FREE EXTENTS LIST。
     当需要新的 EXTENTS时,ORACLE会从这个LIST中取一个FREE EXTENT分配给需要的 SEGMENT。
     SEGMENT释放空间时,空闲的EXTENTS会加入到这个LIST中以便后续使用。
 
segment
    CREATE TABLE/INDEX
    STORAGE字句,用来指定存储特性。如果没有指定,按照 TABLESPACE的STORAGE属性来,如TABLESPACE也没有指定STORAGE属性,则按照ORACLE的默认值来。
    通常,一个 TABLE对应一个SEGMENT(PARTITION的除外)。
    一个 SEGMENT只能在一个TABLESPACE内部。
    对于 PARTITIONED表每个PARTITION占一个SEGMENT,每个 SEGMENT可以在不同的TABLESPACE中。

 

你可能感兴趣的:(oracle,学习,职场,block,休闲)