快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220
网站建设
移动开发
小程序开发
运维推广
网站推广
网站推广
运维外包
运维外包
网站报价
经典案例
网站知识
关于我们
网站建设知识
十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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
当前题目:assm/msmm
URL标题:
http://6mz.cn/article/jipcdd.html
其他资讯
CSSMedia媒体查询
如何理解MySQL中binlog和innodb_flush_log_at_trx_commit
flexslider.js实现移动端轮播的示例分析
创建DBlink
Java多线程的阻塞队列怎么实现