千家信息网

assm/msmm

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、MSSM和ASSM如何工作:MSSM是在每个段中以freelistl链方式管理段中空闲数据块(块中空闲区高于pctfree默认10%),当向一个空数据块插入数据量达到数据块大小1-pctfree时
千家信息网最后更新 2026年11月01日assm/msmm一、MSSM和ASSM如何工作:
MSSM是在每个段中以freelistl链方式管理段中空闲数据块(块中空闲区高于pctfree默认10%),当向一个空数据块插入数据量达到数据块大小1-pctfree时,即停止对该块进行插入,而再分配另一个新数据块进行插入,并将该块从空闲列表freelist中移除。因此每个块的利用率为1-pctfree,是为了以后发生update 操作此块发生行迁移或行连接,增加磁盘I/O。
当数据块内数据被删除到pctused所指定值(默认40%)时,即将该块挂起到freelist上,使其可以接受新数据段插入。

在segment中若同一时刻发生多个insert,会引起freelist争用,故一个segment中可存在多个freelist。freelist的多少决定了同一时刻在同一segment中进行insert操作的数量。多个freelist又可归属于不同的freelist group。

当grouplist=1时,第一个block为段头块,存放freelist及HWM信息,其余均为数据块,第一个数据块是从第二个块开始插入的。
当freelist group >=2时,freelist从segment header内分离出来,存在单独的block中,每个freelist group占一个block,及真正的数据从1(段头)+n (freelist group数据)块之后的块开始。

ASSM(默认)以位图BMB方式管理段中的空闲数据块以避免freelist链表竞争,
当段空间<=1M,第一个块为一级位图块,该块管理2个分区内那些块,第二个块为二级位图块,它指明所有一级位图块的位置,第三块为段头,存放所有区的编号、一级位图块和而及位图块。第17个块也为位图块,管理第18~32个块,即2个区。依次类推。
当当段空间>1M,前16个区与上述相同,从17个区开始2个一级位图管理1个区,因为一个一级位图最多可管理64个块

二、ASSM介绍
ASSM是Automatic Segment Space Management的缩写。与ASSM相对是Manul Segment Space Management。只有在Locally Managed Tablespace中可以使用ASSM,system tablespace不可以使用ASSM。Locally managed tablespace和ASSm是11gR2的默认配置。

In a locally managed tablespace, following parameters are not used any more:

next
pctincrease
minextents
maxentents
default

ASSM uses bitmap to manage space, whereas MSSM uses free list to manage free space.

在创建Tablespace时可以显式指定:

create tablespace tools
datafile '/ora01/dbfile/INVREP/tools01.dbf'
size 100m -- Fixed datafile size
extent management local -- Locally managed
uniform size 128k -- Uniform extent size
segment space management auto -- ASSM

表空间tools虽然采用ASSM,但是空间超出100M后,依然需要手工增长。或者增加datafile。亦即,表空间存储空间的上限是有数据文件的属性决定的,不是ASSM。
ASSM的参数比MSSM少许多,一个Pctfree就够了。以下参数不再需要

pctused
freelist
freelist group

查看tablespace是如何管理的:

select tablespace_name ,extent_management ,segment_space_management
from dba_tablespaces
order by tablespace_name;

三、assm补充
从Oracle 9i开始,管理段空间有两种方法:手动段空间管理和自动段空间管理(Auto Segment Space Management,ASSM);

ASSM用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和<25%,也就是说位图其实采用了四个状态位来代替以前的PCTUSED,什么时候该利用该数据块则由设定的PCTFREE来确定。

对于ASSM,只需控制与空间使用相关的一个参数:PCTFREE。创建段时也可以接受其他参数,但是这些参数将被忽略。
在存储/段 特征这方面,应用于ASSM段的存储设置只有:

BUFFER_POOL
PCTFREE
INITRANS
MAXTRANS(仅用于9i,在10g及以上版本中,所有段都会忽略这个参数。)

BUFFER_POOL : 可以将表放到keep或其它中,如: ALTERTABLE Table_Name STORAGE ( BUFFER_POOL KEEP) ;

PCTFREE:该参数用于告诉oracle应该在块上保留多少空间来完成将来的更新,默认10%。如果自由空间百分比高于PCTFREE中指定的值,这个块就被认为是自由的。

使用ASSM时,PCTFREE会限制能否将一个新行插入到一个块中,但是它不会控制一个块是否在FRRELIST上,因为ASSM根本不会使用FREELIST,在ASSM中PCTUSED也被忽略。

PCTFREE有3种设置:太高、太低、刚刚好。如果把块的PCTFREE设置的太高,就会浪费空间。如果把PCTFREE设置为50%,而你从未更新数据,那么每个块都会浪费50%的空间。不过,在另一个表上,可能50%非常合理。如果行最初很小,现在想将行的大小加倍,但是倘若 PCTFREE设置太小,更新行时就会导致行迁移。


行迁移是指(rowmigration)是指由于某一行变得太大,无法再与其余的行一同放在创建这一行的块中,而放到其它的块中。

如果这种行迁移所占的比例相当大,而且有大量用户在访问这些行,访问这些数据的速度就会开始变慢,因为额外的i/o以及与i/o相关的闩定都会增加访问时间,缓冲区缓存的效率开始下降,因为需要缓存两个块,而如果没有行迁移只需要缓存一个块。另外表的大小和复杂性都有所增加。


如何设置PCTFREE(ASSM):
如果你插入了将要更新的大量数据,而且这些更新会频繁地增加行的大小,此时可以设置比较高的PCTFREE,因为这可以在插入后在块上预留大量空间。
如果只想对表完成INSERT或DELETE,或者UPDATE只是对行大小影响比较小,此时可以设置比较低的PCTFREE。



相关信息可参考:

Oracle 自动段空间管理(ASSM:autosegment space management)

http://blog.csdn.net/tianlesoftware/article/details/4958989

Oracle ASSM三级位图块结构

http://www.eygle.com/archives/2007/07/oracle_assm_level3_bmb.html

http://www.itpub.net/thread-99486-1-1.html








数据 空间 位图 管理 参数 大小 更新 空闲 多个 缓存 存储 自由 一行 信息 只有 方式 时刻 状态 分配 控制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 上海睿民互联网科技有限公司 互联网科技工作委员会 广州互联网络科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 海南科技产业互联网平台 互联网科技实习生岗位职责 剑昆互联网络科技有限公司临桂 银川新华互联网科技职业技术培训学校图片 中化能源互联网科技招聘 互联网科技扶贫时间 互联网新科技动漫ppt素材 互联网行业科技股 爱医互联网络科技 明优互联网科技有限公司 互联网高科技行业有哪些企业 银川新华互联网科技学校是国营吗 互联网科技职业技能培训学校 保山浩联互联网科技有限公司 科技发展第三阶段互联网时代 百单网互联网科技有限公司怎么样 互联网属科技 上海互联网科技有限公司 郑州华宇互联网科技 中国科技互联网公司收入 洛阳共同富裕互联网科技有限公司 每天都有哪些好的互联网科技 工业互联网科技成果转化 互联网高科技绘画 互联网科技企业文化
0