oracle块盘区段
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle块、盘区、段
本章主要介绍Oracle数据库的逻辑存储结构及其关系,包括以下内容
一、介绍data block,extent,segment
二、Data Block综述
三、Extent综述
四、Segment综述
一、介绍
数据块(Block):数据块是oracle的存储单位,也叫逻辑块,oracle块,是物理磁盘的一个空间。区(Extent):一组数据块构成一个区。
段(Segment):由一组区构成,被分配到一个特定的数据结构中,段只能存储于一个表空间中,不能跨越表空间存储
当构成一个段的所有区空间满了后,系统需要分配其他的区给该段以便存储数据,这些新增的区可能是临近的也可能不是临近的。
段以及构成段的所有区只能存在于一个表空间中,但是段是可以跨越数据文件的,而区是不能跨越数据文件的。
如果分配一个区到一个特定的场合,那么区所包含的数据块同时也被分配过去。
如果区没有被分配到一个特定的场合,那么他所对应的数据块只有在高水位线改变的时候才会被分配。
高水位线是段中使用和为使用空间的一个分界线。
二、数据块综述
oracle通过数据块管理数据文件中的存储空间。数据块是数据存储的最小单位。在操作系统中,数据都是以位的方式进行存储。
每个操作系统都有个block size,而oracle中的data block size是操作系统数据块大小的倍数。在oracle中,数据块的大小由
初始化参数db_block_size决定。
数据块包含了header(包含基本信息,比如块地址,段类型),table directory(),rowdirectory,free space,row data
其中header,table directory,row directory统称为overhead,overhead大小有些固定有些可变,平均下来overhead大小
在84--107bytes之间。
row data包含table data或者index data。row可以跨越block
free space分配给那些需要增加额外空间以便insert或者update数据。
Free Space Management
可以手动或者自动管理。bitmap方式对空间进行管理。当创建本地化管理表空间后,段空间即为自动管理,同时在该表空间
创建的其他段也同样为自动管理。
当free space不连续时,向该段insert数据,oracle会对这些不连续的block进行压缩、接合处理,这将降低数据库的性能,
因此仅到出现block不连续时,数据库才会做如此操作。
Row Chaining and Migrating
当一条记录特别大,一个block不足以存储时,oracle会把这条记录存储在多个block中,并且把这些block连接起来,当成一个block
处理,这种情况在long和long raw型中经常出现。
当一条记录存储在一个block中,现被update,该blcok的空闲空间被占满,那么oracle将把这条记录从以前的block中移动到一个
新的block中存储,row id将不会改变。
当以上两种情况发生时
,I/O性能会降低,因为oracle查询这条记
录时将扫描不止一个block
PCTFREE PCTUSED
The PCTFREE parameter sets the minimum percentage of a data block to be reserved as free space for possible updates to rows that already exist in that block. PCTFREE定义一个数据块的最小空闲百分比。如在create table是设置了PCTFREE20,那么这个segment中的每个数据块空间最多被insert占用到80%,剩下的20%,用来给update 已经存在于该块中的数据用。
The PCTUSED parameter sets the minimum percentage of a block that can be used for row data plus overhead before new rows are added to the block.
PCTUSED定义一个数据块能被insert时的该块最小的空间占用百分比。如在create table时设置了PCTUSED40,那么只有当占用百分比小于40%时,该块才能再次被insert数据。
此时感觉PCTFREE和PCTUSED有些矛盾,且看下面的定义。
PCTFREE、PCTUSED一起作用
在一个新分配的块中能用于insert的空间为块大小减去块头(overhead)及PCTFREE空间的总和后剩下的空间。update可以使一个数据块的可用空间小于PCTFREE。
每个data segment或者index segment都有多个free list,只有那些空闲空间大于PCTFREE 且使用空间小于PCTUSED的块才会存在于FREE list中,可被选用。当发起insert时,ORACLE 会检查free list中第一个可用块,当该块的空闲空间不足以满足该insert,该块将被ORACLE从该free list中丢弃。当insert并发时,一个段有多样的freelist可以减少对freelist的竞争。当一个新的块被用来insert时,最多能被使用到80%的空间,剩下20%用来update已经存在于该块中的数据,当占用率到了80%以后,如果该块的使用率一直在40%以上,那么将不能在insert into数据到该块中。只要当该块的使用率变化到40%以下时,该块才会出现在free list 中,且该块才可能被再次insert into数据,且最多insert到80%。
当delete或者update发生后,oracle会检查该块的可用空间,如果可用空间小于PCTUSED 时,该块将被放到freelist中的起始位置供该事务使用,当commit后,可以被其他的transaction使用。
三、extent综述
extent是数据库分配存储空间的一个逻辑单位,extent组成segment,构成段的extent的空间被使用完后,数据块立即分配新的区给segment使用。
When Extents Are Allocated
当创建一个表时,Oracle会分配一个初始的且指定block数量的extent给这个segment,即