ITPub博客

首页 > 数据库 > Oracle > 手工管理段空间大概

手工管理段空间大概

原创 Oracle 作者:dotaddjj 时间:2011-08-31 13:02:26 0 删除 编辑

oracle9I后可以对段内的数据块自动段空间管理,oracle9I前需要对段内的数据块手工管理。手工管理段空间manaual segment space management(MSSM)

手工管理段空间是在段头放置一个自由列表来管理block的使用,可以把自由列表freelist想象成tables,手工管理段空间也就是insert和delete这个自由列表的block来手工管理段空间。

可以create 手工管理的tablespace

Create tablespace MSSM datafile ‘’ size 50M

extent management local

segment space management manual

然后在MSSM中创建对象

Create table MSSM(id number) tablespace MSSM

在创建段时会为段分配自由列表freelist,默认的段内只有一个自由列表。

Select segment_name,segment_type.freelist from dba_segments

Dba_segments数据字典视图中记录了段内自由列表数,上述的MSSM表段内就默认得创建了自由列表。

当向一个对象中插入数据时,oracle会首先查找对象所在的段内自由列表freelist上寻找可用于插入数据的block,当block内的使用完毕后就从freelist上移除,然后段内block由于delete和update等释放空间时又要重新放置到freelist自由列表上。关于block到freelist主要是通过存储参数pctfree和pctused来实现。

当向一个block插入数据时,假设pctused=40 pctfree=20,往此block插入数据当block内的可用空间低于pctfree到时,无法再对此block插入数据,剩余的空间将用于更新段内已有的数据,将此block从自由列表freelist上移除,然后由于delete和update释放block内的空间,当block内的可用空间低于pctused时,此block又会被加载到自由列表freelist上用于后续block数据的插入更新。

段是由扩展构成,扩展由block构成,看oracle concept中block存储数据的最小I/O, 由于段是属于某个对象的,所以段内的block都是存储此对象的,一个block是无法存储两个段的对象数据行。

如果一个段内操作比较频繁,默认的段内都只有一个freelist自由列表用于管理段内的block的分配,那样就会导致竞争。

Select segment_name.file_id,block_id,blocks from dba_extents where tablespace_name=’USER’

Segment_name file_id block_id blocks

Ashuang 4 57 8

上面的segment_name段的名称,一般和表名 索引名相同,file_id数据扩展所在的数据文件的编号,block_id此扩展在段内数据块的起始编号,blocks代表此扩展的数据块数量。

(可以使用alter table tablename deallocate unused命令回收高水位后面未使用的块—回收未使用的数据扩展,但是回收后留下的总块数为8的倍数,从而一般不会把未使用的块是好全部回收。)

通过转储数据文件中的特定数据块

Alter system dump datafile 4 block_id 57

跟踪日志中:

Start dump data blocks tsn: 4 file#: 4 minblk 57 maxblk 57

buffer tsn: 4 rdba: 0x01000039 (4/57)

scn: 0x0000.00054017 seq: 0x02 flg: 0x04 tail: 0x40172002

frmt: 0x02 chkval: 0x062b type: 0x20=FIRST LEVEL BITMAP BLOCK

Dump of First Level Bitmap Block

--------------------------------

nbits : 4 nranges: 1 parent dba: 0x0100003a poffset: 0

unformatted: 0 total: 8 first useful block: 3

owning instance : 1

instance ownership changed at 08/30/2011 13:50:00

Last successful Search 08/30/2011 13:50:00

Freeness Status: nf1 0 nf2 0 nf3 0 nf4 5

Extent Map Block Offset: 4294967295

First free datablock : 3

Bitmap block lock opcode 0

Locker xid: : 0x0000.000.00000000

Inc #: 0 Objd: 49204

HWM Flag: HWM Set

Highwater:: 0x01000041 ext#: 0 blk#: 8 ext size: 8

#blocks in seg. hdr's freelists: 0

#blocks below: 5

mapblk 0x00000000 offset:0

--------------------------------------------------------

DBA Ranges :

--------------------------------------------------------

0x01000039 Length: 8 Offset: 0

0:Metadata 1:Metadata 2:Metadata 3:75-100% free

4:75-100% free 5:75-100% free 6:75-100% free 7:75-100% free

可以看出每个数据块也记载着相应的scn信息,上面的hdr's freelists表示空闲的数据块数量。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1054613/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662977