Fundamental I 09 Storage Structure and Relationships

来源:互联网 发布:淘宝抢红包软件被骗 编辑:程序博客网 时间:2024/05/18 01:19

逻辑结构

Oracle结构



Segment的分类

  * Table

  * Table partition 针对大数据量, 逻辑上这些分区表是属于一张表, 但是一个partition占用Segment

  * Cluster 数据相关性, 物理上就在一块

  * Index 索引, 一个index会占用1到n个Segment

  * Index-organized table IOT 性能优化上用到, 可以用到不同的BLOCK_SIZE

  * Index partition

  * Undo Segment: 存储在Undo Disk里面, 处理回滚动作

  * Temporary segment: 主要用于排序等

  * LOB segment: Large Object Segment, 一个LOB 占用一个Segment, table里面存储的是指针 一般不直接村粗LOB, 存储目录更好, 可以用到不同的BLOCK_SIZE

  * Nested Table: 嵌套表, 和LOB的相似, 指向另外一个资源


如果存储参数改变, 只对未分配的extent有效

有的参数不能再TS级别指定,只能在Segment指定


* Block: Oracle的Block大小是OS的2的数倍

  DB_BLOCK_SIZE指定了缺省的Block大小, 在创建DB的时候被指定,不能修改,用于SYSTEM和TEMPORARY TS

  对于标准的Block size , 最小为1 granule ( 4 MB or 16 MB ), 缺省为 48MB

  对于非标准 Block size: 必须使用DB_nK_CACHE_SIZE 此处n的值为设置的DB_BLOCK_SIZE相同

  非标准块的使用场景

    * OATP: 联机事务交易系统, 一般DB_BLOCK_SIZE采用8k

    * OAAP: 联机分析系统, 做分析用, 所以 DB_BLOCK_SIZE 会比较大,扩大到32k, 如果BLOCK_SIZE相同, 方便数据转移


  Block内容: Header(控制信息)--> Free space --> Data 空间分配的方向是从下往上


   Block的重要参数

    * INITRANS: 一个transaction只占用一个事务槽, 控制并发数, 如果值为3, 可以有3个transaction同时操作该block

    * MAXTRANS: 指定最大的Transaction并发数,  默认值为255

    * PCTFREE (重要, 性能调优): 规定了最少的空闲空间, 其目的为了为已存在的Block的扩展, 默认是10%

    * PCTUSED (重要, 性能调优): 指定了最小的使用空间, 其目的是为了维护Block, 默认是40%

  PCTFREE和PCTUSED的是data block减去header之后剩余空间大小的百分比


管理Data Blocks的方式

  * 自动管理: 只能为,

  Automatic segment-space management只能被Local Managed tablespace 设置.

    CREATE TABLESPACE ......... SEGMENT SPACE MANAGEMENT AUTO;

  * 手工管理, 在Oracle 9i以前唯一能够使用的管理方式

    High PCTFREE, low PCTUSED用来保存插入一次, 但是常更新的数据.

    Low PCTFREE, high PCTUSED用来保存主要操作为insert和delete操作的数据.



Oracle的数据处理的算法:

  HWM: High-Water Mark

  FREELIST: 指针, 指向了空余的空间, 查找数据之前先在FREELIST查找, 并且HWM 里面查找,如果HWM满了就移动HWM,然后获取空间

  1. 在FREELIST里面查找空间, 如果没有多余空间, 则移动HWM, 并且分配新的Block以供插入.

  2. Oracle在搜索的时候, 会搜索至HWM

  3. 使用Delete之后,HWM位置不变, 使用truncate之后, HWM的水位会重置, 所以在truncate以后, 查询效率更快


  当Block的空闲空间小于PCTFREE, 就会把Block加到FREELIST

  当Block的空闲空间大于PCTUSED, 就会把Block从FREELIST移除


---------------------------Tables & Views----------------------------


DBA_EXTENTS;    --记录Extent的信息

DBA_SEGMENTS;    --记录Segment信息

DBA_TABLESPACES;    --

DBA_DATA_FILES;    --

DBA_FREE_SPACE;    --



----------------------------Command----------------------------------

CREATE TABLESPACE tbs_1 DATAFILE 'userdata_01.dbf' SIZE 10M BLOCKSIZE 8k;    --创建TS, 并且设置BLOCKSIZE=8k, 创建后不能修改


SELECT TABLESPACE_NAME, BLOCK_SIZE FROM DBA_TABLESPACES;    --查询TS的BLOCK_SIZE


SET AUTOTRACE ON STAT;    --开启统计信息, 可以看到的内容如下: 

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         23  consistent gets
          0  physical reads
          0  redo size
        424  bytes sent via SQL*Net to client
        419  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


SET AUTOT OFF;