Oracle的数据存储结构

Oracle的数据存储结构
表空间(tablespace)  oracle中最大的逻辑存储单位
数据文件(data file)表空间物理存储载体
段(segment) oracle中所占用空间的对象总称。
区(extent) 段的组成单位
数据块(data block)区的组成单位,是oracle存储和数据操作的最小单位。


数据块(block)


数据块组成:
块头(管理信息:数据块的地址、表目录、行目录、ITL SLOP(trsanction 事务管理))、数据。

ROWID组成
Object number– file number – block number– row number

DBMS_ROWID包


通过ROWID访问数据是最快的

数据块的存储属性
PCTFREE: 但数据块的数据达到PCTFREE这个值时,将不允许继续插入数据
PCTUSED: 当数据块中数据占用空间小于PCTUSED时,数据块会被再次使用,继续可以插数据

行迁移和行链接
--行链接(Row Chaining):数据块放不下行的内容,会将部分存入另一个数据块并和第一个数据块产生链接(一般发生在insert)
--行迁移:数据块放不下行内容,将内容存入另一数据块,并在第一个块中存放指向他的指针。(一般发生在update)
注意:ROWID不会发生变化

数据块空闲空间的合并
① 可以手工对数据块进行空闲空间合并,oracle在一般情况下汇总进行空闲空间合并
- 当一个插入或者更新操作的行在一个数据块中有足够的空闲空间
- 并且这个空闲空间是碎片状态,无法满足一行数据的使用
② Oracle不总是自动整理碎片(合并空闲空间)的原因是,这会导致一定的系统资源开销。

索引数据块的整理
Alter index COALESCE – 合并同一个支的数据块
Alter index REBUILD – 重构整个索引段

区(extent)
Extent定义
Extent是有一组连续的数据块组成,多个extent构成一个段(segment),当创建时,oracle会为它分配一个初始extent
一个段的extents可以分布在不同的数据块。
查询一张表段-extent-数据块的信息


段定义
在oracle中,凡是分配了空间的对象,都称之为段。
- 表、表分区
- 索引、索引分区
- 大对象(LOB)
段分类
- 数据段
- 临时段
- 回滚段
临时段(临时表空间)
- 排序、hash、merge…(需要中间的数据处理区域)
  . 创建索引、order by、hash join、merge join
- 只有在内存空间不足时,oracle才会在临时表空间上创建段
- 临时表由于不产生redo,能够提供数据操作的性能(回收、扩展效率更高)
   临时表

   On commit设定
   Delete rows    事务提交删除表
   Preserve rows  会话结束提交
段数据的压缩
oracle允许对段进行压缩
优点
- 减少存储空间
- 减少处理的数据块
. 减少内存占用
. 提高I/O速度
. 提供查询效率
缺点
- 因为要额外对数据做处理,在数据插入时,会消耗更多的资源和时间
段压缩的级别
- 表级(索引)


- 表空间级

- 分区
- 子分区
段的存储管理
- MSSM
. 手工设定对象的存储参数
PCTFREE, PCTUSED, FREELISTS…..

- ASSM
. oracle自动设定对象的存储参数
只可以手工设定PCTFREE参数,其他参数由自动设定
创建段管理 MSSM

优点:
- 给予DBA更大的空间管理余地
- 对于一些数据块操作非常敏感的场景依然有用
缺点:
- 设置参数多
- 参数设定值困难
- 需要更高的水平
自动段管理 ASSM
通过位图方式管理空间


优点:
- 简化管理
- 增大并发度
- RAC环境下能改善并发性能(不需要各个实例间相互访问大量的freelist)
劣势:
- FTS(全表扫描)
- 大数据的加载,会导致性能下降
- 影响索引的集群因子
表空间
物理上表空间有:Data Files、Temp Files
大文件表空间
- 普通的数据文件、受到数据块的限制
. 每个数据文件最多包含2^22-1个数据块
- 大数据文件、可以使用2^32个数据块

优势
- 减少数据库的数据文件个数
- 方便文件的管理,不需要人工干预表空间的大小
- 减少数据库对文件图同步的开销

表空间的管理方式
- 本地管理表空间
. 依赖于段管理

- 字典管理表空间
表空间中的存储的信息记录在Oracle数据字段(system)表空间中,凡是DML操作,都需要访问SYSTEM表空间和相关的视图

表空间的存储属性
- 数据管理方式
. local
. dictionary  11G不在使用
- 段管理
. ASSM
. MSSM
- extent管理
. AUTOALLCATE
. UNIFORM
表空间的默认属性
   

表空间的extent的管理方式
AUTOALLOCATE
- 由Oracle自动决定新分配的extent的大小
UNIFORM
- 统一extent尺寸


表空间属性 --- 段属性
- 段对象的存储属性可以直接从所在的表空间集成过来
- 也可以单独设定自己的属性
Oracle的读操作
逻辑读(logical reads)
- 从内存中读取数据块
.  current reads(DB block gets)
.  consistent reads
物理读(physical reads)
- 从磁盘读取数据块到内存

单块读和多块读
① 每次从磁盘读取一个数据块称为单块读
- 对应的对待事件 db file sequential read
② 每次从磁盘读取多个数据块称为多块读
- 对应的等待事件 db file scattered read
- 每次读取的数据块有参数DB_FILE_MULTIBLOCK_READ_COUNT确定
LRU(Least Recently used)列表
- Lru使用中部插入算法,数据从中部插入列表
- Lur列表分为热段和冷段
- 中部插入点为冷端的头部,也就是热端的尾部。
   备注:数据库的多版本,一致性读构造数据库的多版本。
   多数据块在LRU支持下读:多块读完立刻扔到冷端的最右端。


猜你喜欢

转载自fengbin-89.iteye.com/blog/2111687