段:
一个段是一系列的区的集合,包含表空间内一个特定逻辑存储结构的所有数据。对每个表Oracle会分配一个或者多个区段来组成表数据段。
一个表可能不止一个段的情况:一张索引组织表可能包含多个段、一张表中有lob字段(lob字段存储在独立的段内),分区表
oracle段的类型:数据段,临时段,回滚段,索引段
区:
区是数据库存储空间的一个逻辑单位,由多个连续的数据块组成。一个或多个区段组成一个段。当段中现存空间用完时,Oracle会为这个段分配一个新区。
因为区是按需分配的,段中的区可能在磁盘上并不连续。一个段或它的所有区段都保存在一个表空间上。在一个表空间内,一个段可以包含来自多个数据文件的区;就是说,段可以跨数据文件。
虽然如此,每个区段只能来自于一个数据文件。虽然你可以分配额外的区段,但它的数据块是单独分配的。高水位线是段中可用空间和不可用空间的界线。
在创建表空间没有指定区大小的时候,区的分配是随着段的不断撑大,区分配的大小是递增的(64KB,1MB,8MB...)
块:
每个用户创建的表空间可以使用不同的块大小。不管块的大小,每个数据块的块头的结构都是一样的
存放表和索引数据,其结构主要由块头、事务层、数据层和块尾4部分组成(块尾是为了和块头进行数据校验,确保数据块是一致的)
了解行迁移和行链接,行迁移由于一整行的数据被分成多个分片构成,这些分片位于不同的数据块,因此访问这些数据需要多个逻辑读,对于dml操作,其他分片也都要加行锁,这些附加的itl操作极大影响性能
每个itl槽的组成:回滚段号,插槽号,事务主键,undo地址,标志(事务提交状态)
还有就是pct-free和pct-used也顺带提一下:
pctfree这个参数定义了一个块保留空间的百分比,保留空间是为了将来可能发生的更新操作
pctused这个参数控制一个块什么时候被重新启用来插入数据,但是这是基于freelist管理的表空间,一般创建表空间的时候系统默认的segment space management管理是auto(即用位图管理),那么就不启用pct-used。
反之管理模式为manual,则使用freelist管理启用pct_used。