自动段空间管理(ASSM)和 手动段空间管理(MSSM)
Posted lyywml
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动段空间管理(ASSM)和 手动段空间管理(MSSM)相关的知识,希望对你有一定的参考价值。
MSSM:Manul Segment Space Management手动分段空间管理
这种技术的具体实现方式是通过在段头(Segment Header)分配自由列表(freelist)来管理Block的使用,简单一点,可以把自由列表想象成一个数据表,Oracle依赖一系列的算法通过向自由列表中加入或移出Block来实现段空间管理。
当向一个对象中插入数据时,假设PCTFREE=20,PCTUSED=40,这就表明当一个Block的空间使用率达到了80%时,这个block就不再允许被用于新增数据(insert),而保留下来的这20%的空间则被预留为行更新(update)所可能需要的空间扩展,此时这个Block就从freelist上被移除;当这个Block中有数据被删除(delete)时,空间不断被释放,当空间使用低于PCTUSED参数设置时(此处即为40%),这个数据块块才会重新被加入到freelists中,加入freelist后这个Block又可以被插入新的数据
缺点:如果一个段的操作非常频繁,那么很多用户就会同时请求访问freelist,并对freelist进行修改,这就很容易产生竞争。对于表来说,缺省的freelist为1,这就很容易引发竞争,虽然可以通过增加freelist的方法缓解这种竞争,但是我们已经看到这种管理方式存在的缺陷
----------------------------------------------------------------------------------------------------
ASSM:Automatic Segment Space Management自动分段空间管理
只有在Locally Managed Tablespace中可以使用ASSM,system tablespace不可以使用ASSM
只有一个关键的SQL参数控制空间分配: PCTFREE。
insert通过扫描位图来查找可用的block,即使block的可用空间低于PCTFREE,也不会从位图中摘除,因此PCTUSED参数将不再需要;而PCTFREE参数,仍然需要它来指示需要保留多少空间给后续的update导致的行数据增长使用。至于freelists和freelist groups参数在ASSM中都无效了。
原有的freelist被位图所取代,通过位图能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善段存储管理的本质。
优点:Oracle宣称显著地提高了DML并发操作的性能,因为位图数组的不同部分可以被同时使用,这样就消除了寻找剩余空间的串行化。根据Oracle的测试结果,使用位图数组会显著地消除所有对段头的竞争,还能获得超快的并发插入性能
CREATE TABLESPACE lmtbsb DATAFILE ‘/u02/oracle/data/lmtbsb01.dbf‘ SIZE 50M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
----------------------------------------------------------------------------------------------------
增大减小PCTFREE的影响
如果PCTFREE的值太大,记录又可能很长,这会引起行链接(ROW-CHAINING),同时空间利用率也不高;
Row Chaining在初次insert时发生,如果记录大小超过了整个block可用大小,那么记录将会跨越多个block。- PCTFREE的值太大,block的可用于insert的空间就小
如果PCTFREE的值太小,会影响块数据记录的增长,容易引起行迁移(ROW-MIGURATING); PCTFREE的值太小,block可用于update的空间就小
增大减小pctused的影响
如果pctused过大,那么可能仅仅是删除了一点儿内容,这个block就又重新被标志为free了,当又增加了一点儿内容(达到了1-pctfree的值),又被从freelist中摘除,频繁操作freelist是影响性能的。
如果pctused过小,那么即使删除了很多内容,也许这个block仍然不被放到freelist中也就仍然不能被用于insert新数据,所以空间浪费。
点赞
以上是关于自动段空间管理(ASSM)和 手动段空间管理(MSSM)的主要内容,如果未能解决你的问题,请参考以下文章